【问题标题】:How do I make many-to-many field optional in Django?如何在 Django 中使多对多字段成为可选字段?
【发布时间】:2011-02-01 12:51:55
【问题描述】:

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

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

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

如果我通过 phpMyAdmin 使用数据库,我可以在不注册 Event 的情况下创建 Group,因为两者之间的连接仅通过单独的表进行,并且在给定级别没有数据库值强制执行。

如何使管理界面实现这一点?
如何在 Django 中使多对多字段成为可选字段?

【问题讨论】:

    标签: django django-admin many-to-many


    【解决方案1】:

    如果您希望能够指定 ManyToMany 关系而不使其成为必需,只需使用blank=True

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

    【讨论】:

    • 这确实解决了问题。使用空白对我来说并不那么明显,因为我认为 manytomany 创建了一个将事件与组链接的表 (events = models.ManyToManyField(Event, related_name="groups", blank=True) 所以不清楚使用空白,因为 Event 实际上不是组表中的一个字段。无论如何它工作了,所以谢谢!!!
    • @omouse 我认为是的,空白用于 django 验证,null 用于数据库。在这种情况下(例如 IntegerField),我认为将一个没有另一个放在一起是没有意义的
    • 你真的需要null=True吗?我的印象是nullManyToMany 字段没有任何影响:stackoverflow.com/questions/18243039/…
    • 是的,嗯@TylerHayes 是对的。 null=True 基本上是无操作的,在多对多的上下文中是无意义的。我愿意被展示我是如何错误的。
    • null=True 不是必需的,至少从 Django 1.5 开始。
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 2018-09-25
    • 2021-08-21
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多