将Django从1.6更新到1.8:在select_related中给出了无效的字段名
将Django从1.6更新到1.8:在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() failed: django.core.exceptions.FieldError: Invalid field name(s) given in select_related: 'trace_points'. Choices are: user>
我的模型:
class Trace(SocialMixin, models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='traces') name = models.CharField(u'Название', max_length=255) rating = RatingField(range=5, weight=0) start_date = models.DateTimeField(u'Дата старта') finish_date = models.DateTimeField(u'Дата окончания', null=True, blank=True) distance = models.DecimalField(max_digits=15, decimal_places=6, null=True, blank=True) created = models.DateTimeField(auto_now_add=True) hits = generic.GenericRelation(HitCount, object_id_field='object_pk') description = models.TextField(null=True, blank=True) class TracePoint(models.Model): country = models.ForeignKey(Country, null=True, blank=True) city = models.ForeignKey(City, null=True, blank=True) trace = models.ForeignKey(Trace, related_name="trace_points")
我也在DetailView中遇到了这个错误,DetailView使用了get_related_selections,当然我得到了\"FieldError: Invalid field name...\",为了避免这个错误,我得使用ManyToManyField代替ForeigenKey?
admin 更改状态以发布 2023年5月23日
Django 1.8会检查select_related
中指定的字段是否正确。 select_related
方法可以用于外键和一对一字段,但不能用于反向关系Trace
到TracePoint
。
在Django的先前版本中,Trace.objects.select_related("trace_points")
不会引发错误,但是select_related()
调用将不起作用。
您可以删除select_related()
调用,或将其替换为prefetch_related
。
Trace.objects.prefetch_related('trace_points')