Ошибка имени при попытке отфильтровать поле даты из базовой таблицы в django

#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)» ?