【问题标题】:Non-relational field given in select_related: ' '. Choices are: (none)select_related 中给出的非关系字段:“”。选项有:(无)
【发布时间】:2019-07-18 14:45:28
【问题描述】:

我有两个来自不同应用的模型:

class Measure(models.Model):
    date = models.DateTimeField(default="2018-01-23 15:55")
    average = models.FloatField(default=0)

class Sensor(models.Model):
    measure=models.ForeignKey(Measure, on_delete=models.CASCADE)
    value= models.FloatField(default=0)

我将来自传感器的所有数据调用如下:

new_context = Sensor.objects.select_related('measure__date')

但是,我收到此错误:

django.core.exceptions.FieldError: 中给出的非关系字段 选择相关:“日期”。选项有:(无)

根据文档,我应该使用 select_related 而不是 prefetch_related,而且调用似乎是连贯的。

我错过了什么吗?

【问题讨论】:

  • 只要Sensor.objects.select_related('measure')。之后,您可以从查询集中获取属性。
  • 升级旧 Django 代码时可能会出现类似问题。这种类型的错误会在 Django 1.10(或非嵌套的 1.8)之前静默失败。请参阅 1.101.8 的发行说明。

标签: python django django-models django-queryset django-select-related


【解决方案1】:

select_related 中,仅应设置ForeignKey 字段。在您的情况下,date 字段是DateTimeField 而不是ForeignKey

所以为了解决它就去做吧:

new_context = Sensor.objects.select_related('measure')

您可以在docs 中查看使用语法的示例。

【讨论】:

  • 谢谢!如果我打电话给print (new_context[0]),这样做我会得到Sensor object (688)。但是,如果我执行print (new_context[0].date),则会收到错误 AttributeError: 'Sensor' object has no attribute 'date'。这怎么可能?
  • @Alvaro ].measure.date
猜你喜欢
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2016-06-02
  • 2011-12-27
相关资源
最近更新 更多