Djangoで多対多フィールドをオプションにするにはどうすればよいですか?


202

多対多の関係(related_name、ではなくthrough)があり、管理インターフェースを使用しようとしている場合、最初のエントリを作成するために存在する必要はありませんが、関係の1つを入力する必要があります。

イベント主催者のアプリを作成しています。モデルが多対多の関係にあるEventと想像してみてくださいGroup

Django related_nameは他の2つのテーブルのインデックスを使用して別のテーブルを作成します。
しかし、この追加のテーブルにデータを入力する必要がある理由はわかりません。

phpMyAdminを介してデータベースを操作する場合、Groupを登録せずにを作成できます。これEventは、2つの間の接続が別のテーブルを介してのみ行われ、特定のレベルでのデータベース値の強制がないためです。

管理インターフェイスにこれを実現させるにはどうすればよいですか?
Djangoで多対多フィールドをオプションにするにはどうすればよいですか?

回答:


348

必要とせずにManyToManyリレーションを指定できるようにしたい場合は、次のように使用しますblank=True

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)

7
これは問題を解決します。manytomanyがイベントとグループ(events = models.ManyToManyField(Event、related_name = "groups"、blank = True)をリンクするテーブルを作成すると思ったので、空白を使用することはそれほど明白ではなかったので、使用することは明確ではありませんでしたイベントは実際にはグループテーブルのフィールドではないので、空白です。とにかくうまくいきました!!!
DZ。

9
@omouseそうだと思います。空白はdjango検証用で、データベースはnullです。(IntegerFieldとのためのような)このような場合には、それは他の私が考えることなく、1を入れても意味がありません
lajarre

17
本当に必要null=Trueですか?私は印象の下にあったnullいずれかに影響を与えていないManyToMany:フィールドstackoverflow.com/questions/18243039/...
タイラー・ヘイズ

5
ええ、ええと@TylerHayesは正しいです。null = Trueは基本的に何もせず、ManyToManyのコンテキストでは無意味です。私は自分がどのように誤解されているかを示されることにオープンです。
ベンロバーツ

7
null = Trueは必要ありません。少なくともDjango 1.5以降では必要ありません。
Ville Laurikari、2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.