#python #django #django-models #django-views
#python #django #django-модели #django-представления
Вопрос:
У меня есть две модели
class Rule(models.Model):
pmdruleid = models.BigIntegerField(primary_key=True)
effectivedate = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = 'rule'
class Ruledefinitions(models.Model):
ruleactivestatus = models.CharField(max_length=14)
pmdclinicalruleid = models.OneToOneField(Rule, models.DO_NOTHING, db_column='pmdclinicalruleid', primary_key=True)
class Meta:
managed = False
db_table = 'ruledefinitions'
unique_together = (('pmdclinicalruleid', 'pmdclinicalvariableid'),)
Я пытаюсь отфильтровать записи на основе поля effectivedate в viewset, как показано ниже
class ActiveclientViewSet(viewsets.ModelViewSet):
queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter(pmdclinicalruleid__effectivedate < datetime.now())
Я получаю NameError: name 'pmdclinicalruleid__effectivedate' is not defined
.
Комментарии:
1. попробуйте изменить на
pmdclinicalruleid__effectivedate__lt=datetime.now()
2. Не работает …
3. та же ошибка? Какая у вас ошибка?
4. Та же ошибка…..
Ответ №1:
Я изменил на
queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter(pmdclinicalruleid__effectivedate__lt = datetime.now())
Это сработало. Проблема заключается в том, что при использовании lt нет необходимости использовать> operator
Комментарии:
1. что отличается от моего комментария?
Ответ №2:
Возможно, если вы заключите его в одинарные кавычки?
queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter('pmdclinicalruleid__effectivedate' < datetime.now())
Комментарии:
1. Мы не можем этого сделать, сравнивая string и datetime.datetime
2. Что, если вы попытаетесь управлять диапазоном? что-то вроде «.filter(effectivedate__range=(startdate, futuredate)» ?