次のような Django モデルがあります。
class MyModel(models.Model):
field1 = models.IntegerField()
field2 = models.IntegerField()
nonDbField = SomeObject()
objects = MyCustomManager()
field1 は、実際には SomeObject の抽象クラスへの PK です。
関数 (all、filter、get など) によって返されるすべての値に対して、次の処理を行うカスタム マネージャーが必要です。
value.nonDbField = SomeObject.objects.get(pk=value.field1)
get を次のように手動でオーバーライドできることをテストしました。
class MyCustomManager(models.Manager):
def get(self, *args, **kwargs):
value = super(MyCustomManager, self).get(*args, **kwargs)
value.nonDbField = SomeObject.objects.get(listid=value.itemListID)
return value
しかし、すべての関数でそれを行う簡単な方法があるかどうか疑問に思いました.
「どうしてこんなことをしているの?」と言う人も多いでしょう。これは、レガシーであるがまだアクティブなデータベースのモデル継承に関係しています。