【问题标题】:Name error when trying to filter date field from base table in django尝试从 django 中的基表中过滤日期字段时出现名称错误
【发布时间】:2021-04-12 09:17:58
【问题描述】:

我有两个模型

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'),)

我正在尝试根据视图集中的有效日期字段过滤记录,如下所示

class ActiveclientViewSet(viewsets.ModelViewSet):
 queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter(pmdclinicalruleid__effectivedate < datetime.now())

我收到NameError: name 'pmdclinicalruleid__effectivedate' is not defined

【问题讨论】:

  • 试试改成pmdclinicalruleid__effectivedate__lt=datetime.now()
  • 不工作...
  • 同样的错误?你有什么错误?
  • 同样的错误.....

标签: python django django-models django-views


【解决方案1】:

我改成

queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter(pmdclinicalruleid__effectivedate__lt = datetime.now())

成功了。问题是使用 lt 时不需要使用 > 运算符

【讨论】:

  • 我的评论有什么不同?
【解决方案2】:

如果你在它周围加上单引号?

queryset = Ruledefinitions.objects.select_related('pmdclinicalruleid').filter('pmdclinicalruleid__effectivedate' < datetime.now())

【讨论】:

  • 我们不能比较字符串和 datetime.datetime
  • 如果您尝试管理范围怎么办?类似 ".filter(effectivedate__range=(startdate, futuredate)" ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多