如何在Django中使多对多字段为可选?


202

当您具有多对多关系(related_name,而不是through)并且尝试使用管理界面时,即使您不必创建第一个条目,也需要输入其中一个关系。

我正在创建一个作为活动组织者的应用。想象一下,我们拥有EventGroup模型,并具有多对多关系。

Django使用related_name另外两个表的索引创建另一个表。
但我看不出为什么这个额外的表已经被填充。

如果我通过phpMyAdmin使用数据库,则可以创建一个Group而无需注册Event,因为两者之间的连接仅通过单独的表进行,并且在给定级别上没有数据库值强制实​​施。

我该如何实现管理界面?
如何在Django中使多对多字段为可选?

Answers:


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),因此不清楚使用由于Event实际上不是组表中的字段,因此为空。无论如何,它工作正常,谢谢您!
DZ。10

9
@omouse我认为是的,django验证为空白,数据库为null。在这种情况下(例如IntegerField),我认为没有一个就没有意义
lajarre 2012年

17
您真的需要拥有null=True吗?我的印象null是对ManyToMany字段没有任何影响:stackoverflow.com/questions/18243039/…–
泰勒·海斯

5
是的,嗯,@ TylerHayes是正确的。null = True本质上是不操作的,并且在ManyToMany的上下文中是荒谬的。我很乐意向我展示我怎么弄错了。
本·罗伯茨

7
null =至少从Django 1.5开始,不需要True。
Ville Laurikari 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.