14

今回は私がバカじゃなくて本当の葛藤だと思います。私は以下のコードを持っています(簡略化):

from django.db import models

class Alpha(models.Model):
    relation = models.ForeignKey('Delta', related_name = 'reverse_relation', blank = True, null = True)

    class Meta:
        abstract = True

class Beta(Alpha):
    pass

class Gamma(Alpha):
    pass

class Delta(models.Model):
    pass

問題は、Delta.reverse_relation が Beta のインスタンスまたは Gamma のインスタンスを参照できることです。どうにかして複数の related_name 値 (またはクラス名に依存する値) を提供する必要があります。問題は明らかですが、完全であると思います。関連フィールド「Delta.reverse_relation」を使用。「relation」の定義に related_name 引数を追加します。
app.beta: フィールド 'relation' の逆クエリ名が、関連フィールド 'Delta.reverse_relation' と衝突します。「relation」の定義に related_name 引数を追加します。
app.gamma: フィールド 'relation' のアクセサーが関連フィールド 'Delta.reverse_relation' と衝突します。related_name 引数を ' の定義に追加します
app.gamma: フィールド 'relation' の逆クエリ名が、関連フィールド 'Delta.reverse_relation' と競合しています。「relation」の定義に related_name 引数を追加します。

親アルファに ForeignKey を配置することはまったく可能ですか、またはこのコードをベータとガンマにカットアンドペーストする唯一の方法ですか? すべての子が共有するフィールドの半分を親で定義できないと、継承のポイントが無効になるため、私はそうしないことを好みます。

どんな助けでも大歓迎です!

(エラーメッセージがコードボックスにない理由について誰かがコメントできる場合は、修正します。)

4

1 に答える 1

22

Django ドキュメントの次のアドバイスが役に立ち、関連性があることがわかると思います: https://docs.djangoproject.com/en/1.7/topics/db/models/#be-careful-with-related-name

本質的に関係フィールドの宣言を次のように変更します。

relation = models.ForeignKey('Delta', related_name="%(app_label)s_%(class)s")

幸運を祈ります...

于 2011-08-02T01:09:24.193 に答える