0

後方関係を許可せずに、2つのManyToManyフィールドを持つモデルを作成しようとしています。モデルは次のとおりです。

class Camp(models.Model):
#...

free_options = models.ManyToManyField('Option', related_name='+')
paid_options = models.ManyToManyField('Option', related_name='+')

やろうとした後

python manage.py syncdb

次のエラーが発生します。

エラー:1つ以上のモデルが検証されませんでした:camps.camp:m2mフィールド'free_options'のアクセサーが関連するm2mフィールド'Option。+'と衝突します。'free_options'の定義にrelated_name引数を追加します。camps.camp:m2mフィールド'free_options'の逆クエリ名が関連するm2mフィールド'Option。+'と衝突します。'free_options'の定義にrelated_name引数を追加します。

同じモデルに後方関係のない2つのフィールドを持つことはできませんか?どうすればこれを修正できますか?

ありがとう!

4

2 に答える 2

0

なぜあなたが後方関係を持っていることに悩まされているのかと私は尋ねます、あなたがそれを望まないのならそれを使わないでください。しかし、質問に答えるために、それを完全に削除する方法はありません。

于 2012-07-08T13:09:43.440 に答える
0

ManyToManyFieldのrelated_name引数のDjangoドキュメントによると:

同じモデルを指すManyToManyFieldが複数あり、後方関係を抑制したい場合は、各related_nameを「+」で終わる一意の値に設定します。

強調鉱山。

したがって、それを実行したい場合は、次のことができるはずです。

class Camp(models.Model):
    #...

    free_options = models.ManyToManyField('Option', related_name='free_options+')
    paid_options = models.ManyToManyField('Option', related_name='paid_options+')
    #                                                             ^^^^^^^^^^^^

同じモデル内の複数のManyToManyFieldの後方関係を抑制します。

お役に立てれば!

于 2013-02-06T20:09:28.440 に答える