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

DZ.*_*DZ. 179 django many-to-many django-admin

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

我正在创建一个作为活动组织者的应用程序.想象一下,我们拥有EventGroup模型,与多对多关系绑定.

Django related_name创建了另一个表,其中包含其他两个表的索引.
但我看不出为什么这个额外的表已经被填充.

如果我通过phpMyAdmin使用数据库,我可以创建一个Group没有注册的Event,因为两者之间的连接只是通过一个单独的表,并且在给定级别没有数据库值强制执行.

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

Lud*_*mer 312

如果您希望能够指定ManyToMany关系而不需要它只需使用blank=True:

class Group(models.Model):
    ...
    events = models.ManyToManyField(Event, blank=True)
Run Code Online (Sandbox Code Playgroud)

  • 你真的需要`null = True`吗?我的印象是`null`对`ManyToMany`字段没有任何影响:http://stackoverflow.com/questions/18243039/south-migrating-foriegn-key-many-to-many-field-to-空真空白真犯规 (16认同)
  • @omouse我想是的,空白用于django验证,而null用于数据库.在这种情况下(比如IntegerField)我认为没有其他情况就没有意义 (8认同)
  • 这确实解决了这个问题.使用空白对我来说并不那么明显,因为我认为manytomany创建了一个将事件与组相关联的表(events = models.ManyToManyField(Event,related_name ="groups",blank = True)因此不清楚使用空白,因为事件实际上不是组表中的一个字段.无论如何它都有效,所以谢谢! (7认同)
  • null =不需要True,至少从Django 1.5开始. (7认同)
  • 是的,@TylerHayes是对的.null = True基本上是一个无操作,并且在ManyToMany的上下文中是无意义的.我愿意被告知我是怎么弄错的. (5认同)
  • 当我创建了多对多条目然后不再需要它(从下拉列表中删除)时,我使用“through”并收到“blank=true”错误。保存后我会得到“需要字段”。 (2认同)
  • 从django文档中,null无效,因为无法在数据库级别需要关系.https://docs.djangoproject.com/en/2.1/ref/models/fields/#manytomany-arguments (2认同)