使用代理模型select_related并不适用于Django 1.4.22

时间:2015-09-21 15:56:50

标签: django django-models proxy-classes django-select-related

我有这样的模型结构:

app1.models

class App(FunkyClassLoadoerMixin, DateMixin):

  user = models.OneToOneField(User, blank=False, null=False, db_index=True, unique=True)
  # some other fields

class DateMixin(models.Model):
    date_added = models.DateTimeField(auto_now_add=True)

app2.models

from app1.models import App as BaseApp

class App(BaseApp)

  class Meta:
    proxy = True

FunkyClassLoadoerMixin只是一个有助于以稍微不同的方式加载子类的类,但它不会影响它们的行为。

鉴于此,我有一个类似的查询:

q = SuperStatic.objects.all().select_related('user__app')

(在这种情况下,app对象的类型应为app2.models.App)

评估时,我收到此错误:

local/lib/python2.7/site-packages/django/db/models/query.pyc in get_cached_row(row, index_start, using, klass_info, offset)
   1435                 for rel_field, rel_model in rel_obj._meta.get_fields_with_model():
   1436                     if rel_model is not None:
-> 1437                         setattr(rel_obj, rel_field.attname, getattr(obj, rel_field.attname))
   1438                         # populate the field cache for any related object
   1439                         # that has already been retrieved

AttributeError: 'User' object has no attribute 'date_added'

我不确定为什么会这样。我看了一下Django的源代码,原因似乎是这个函数:

rel_obj._meta.get_fields_with_model()
当模型是子类并且忽略它是代理模型时,

的行为会有所不同。

我找到了一些相关的帖子:

但两者都没有帮助。

有关如何使用的任何想法使用代理类并避免此错误?

0 个答案:

没有答案