0

私はこれらのモデルを持っています:

class Base(models.Model):
    # ... attributes
    def f(self):
        raise Exception()

class A(Base):
    attribute = models.IntegerField()

class B(A):
    class Meta:
        proxy = True
    def f(self):
        print "B", attribute

class C(A):
    class Meta:
        proxy = True
    def f(self):
        print "C", attribute

今、私は彼らと少し遊んでいますが、問題が見つかりました:

c = C()
c.attribute = 1
c.save()

b = Base.objects.all()
b.f() # Aspected "C 1" to be printed, exception fired instead!

最後の行は予期しない方法で機能します。ドキュメントをよく見て、Djangoの自動ダウンキャスト属性を検索しましたが、A()いずれも自動キャストされていないクラスの1つだけが見つかりましたB()or C().

データを保存するときにも継承を保存する方法はありますか? ありがとう!

4

1 に答える 1

1

ドキュメントに従って、Queryset は要求されたモデルを返します。こちらをご覧ください

あなたの例では、元のモデル Base のクエリセットを返します。

于 2012-08-28T14:41:42.137 に答える