1

次のようなモデル構造があります。

app1.モデル

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.モデル

from app1.models import App as BaseApp

class App(BaseApp)

  class Meta:
    proxy = True

FunkyClassLoadoerMixin は、子クラスをわずかに異なる方法でロードするのに役立つ単なるクラスですが、それらの動作には影響しません。

これを考えると、次のようなクエリがあります。

q = SuperStatic.objects.all().select_related('user__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()

モデルがサブクラスであり、プロキシ モデルであるという事実を無視すると、動作が異なります。

関連する投稿を見つけました:

しかし、どちらもあまり役に立ちませんでした。

プロキシ クラスを使用してこのエラーを回避する方法についてのアイデアはありますか?

4

0 に答える 0