将Django从1.6更新到1.8:select_中给出的字段名无效

将Django从1.6更新到1.8:select_中给出的字段名无效,django,django-select-related,Django,Django Select Related,我将项目从Django 1.6.7更新到1.8.7,Django 1.8有以下例外,尽管Django 1.6的代码是正确的: In[2]: from apps.route import models In[3]: models.Trace.objects.select_related("trace_points") Out[3]: <repr(<django.db.models.query.QuerySet at 0x3b50c10>) failed: django.core.

我将项目从Django 1.6.7更新到1.8.7,Django 1.8有以下例外,尽管Django 1.6的代码是正确的:

In[2]: from apps.route import models
In[3]: models.Trace.objects.select_related("trace_points")
Out[3]: <repr(<django.db.models.query.QuerySet at 0x3b50c10>) failed: django.core.exceptions.FieldError: Invalid field name(s) given in select_related: 'trace_points'. Choices are: user>

我在跟踪的DetailView中也有这个bug,DetailView使用与get_相关的_选择,当然我得到了“FieldError:无效的字段名…”,为了避免错误,我必须使用ManyToManyField而不是foreignkey?

Django的不适用于向后的foreignkey关系

您可能希望在python级别使用预取所有跟踪点

models.Trace.objects.prefetch_related("trace_points")
Django 1.8。
select\u related
方法可用于外键和一对一字段。无法将其用于反向关系
跟踪
返回到
跟踪点

在Django的早期版本中,
Trace.objects.select\u related(“Trace\u points”)
不会引发错误,但是
select\u related()
调用将无效

您可以删除
select\u related()
调用,也可以将其替换为,这样就可以了

Trace.objects.prefetch_related('trace_points')

[3]
中的代码毫无意义,因为可以有多个
跟踪点
跟踪点
关联。是的,可以有多个跟踪点,而不是与跟踪点关联的跟踪点,但在旧Django中,它确实起了作用……这在旧版本中可能是一个错误。我在DetailView中也有这个错误,DetailView使用与get_相关的_选择,当然我得到了“FieldError:Invalid field name…”,为了避免错误,我必须使用ManyToManyField而不是ForeigenKey?
Trace.objects.prefetch_related('trace_points')