1

抽象的な基本モデルを持つアプリがあります。

class Approval(models.Model):
    approver=models.ForeignKey(User,to_field='username')
    decision=models.CharField(max_length=50,choices=APPROVAL_TYPES)
    response=models.TextField()

    class Meta:
        abstract=True

次に、その抽象モデルに基づく一連のモデルを作成します。これらはすべて、通常、外部キー (異なるモデルに関連付けられるため) と、そのモデルに固有のいくつかのフィールドを定義します。このようなもの:

class InternshipApproval(Approval):
    req=models.ForeignKey(InternshipRequest)
    priority=models.BooleanField(blank=True)

    def __unicode__(self):
        return "Approval for %s" % (self.req)

次に、たとえば InternshipRequest モデル (実際には、サブクラスの 1 つが関連している可能性のあるモデル) の管理者を設定するときに、InternshipApproval モデルをインラインとして含めたいと考えています。

class InternshipApprovalInline(admin.StackedInline):
    model=InternshipApproval
    max_num=1
    extra=1
    can_delete=False

...

class InternshipAdmin(admin.ModelAdmin):
    inlines= [InternshipApprovalInline]

管理インターフェースが読み込まれると、抽象基本モデルの「承認者」フィールドが空の選択要素になることを除いて、すべて問題ありません。

代わりにサブモデルにそのフィールドを含めると(抽象ベースモデルの代わりに)、完全なユーザークエリセット(またはここで見つけたさまざまな戦略を使用して実行したいフィルタリング)が適切に取得されることを確認しましたSOで)。また、InternshipApproval モデル管理者を個別に登録すると、フィールドが抽象基本モデルにある場合でも、管理者ペイン (つまり、インラインとしてではない) が完全なユーザー クエリセットを適切に取得することも確認しました。最後に、承認者フィールドがまだ機能することを確認しました...その横にある小さなプラス記号を使用して新しいユーザーを追加すると、そのユーザーが表示され、適切に保存されます (ただし、選択した要素から再び消えます入ってモデルを編集します)。したがって、抽象モデルに外部キー フィールドを持つことには何かがあります。クエリセットをインラインに渡させません(オーバーライドできない、初期値を渡すことができないなど)。ここで私が見逃しているのは何ですか?(私は Django 1.5.1 を使用していることに注意してください) よろしくお願いします。

4

0 に答える 0