【问题标题】:Can I make the foreign key field optional in Django model我可以在 Django 模型中将外键字段设为可选吗
【发布时间】:2011-09-30 23:45:26
【问题描述】:

我有这个代码

subject      = models.ForeignKey(subjects)
location     = models.ForeignKey(location)
publisher    =  models.ForeignKey(publisher)

我并不总是可能拥有三种价值的书籍。 所以有时如果我不知道主题、地点或出版商。然后我想让它们空着

但如果我有,那么我需要选择框来选择。有可能吗

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    当然,只需为您希望保留为可选字段的每个字段添加blank=True, null=True

    subject = models.ForeignKey(subjects, blank=True, null=True)
    

    【讨论】:

    • 两者都需要吗?仅使用 null=True 有什么缺点?
    • @WardC 两者的组合非常频繁,因为通常如果您要允许表单中的字段为空白,您还需要您的数据库允许 NULL 值那个领域。 CharFields 和 TextFields 是个例外,它们在 Django 中永远不会保存为 NULL。空白值作为空字符串 ('') 存储在数据库中。
    • @Ward,两者都不需要。只需使用null=True 就足够了。
    • blank=True 对于表单验证很重要。它将允许在此字段中输入一个空字符串作为用户输入。 null=True 将允许数据库列中的 NULL 值。
    • @cezar 评论救了我的命!谢谢
    【解决方案2】:

    on_delete 参数是必要的,如果你这样做会更好。

    subject = models.ForeignKey(subjects, on_delete=models.SET_NULL, blank=True, null=True)
    

    【讨论】:

      【解决方案3】:

      null=True


      subject=models.ForeignKey(subjects, on_delete=models.CASCADE, default=None, blank=True, null=True)
      

      Field.null

      如果为 True,Django 会将空值作为 NULL 存储在数据库中。默认为 False。

      避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null。如果基于字符串的字段具有 null=True,这意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的; Django 约定是使用空字符串,而不是 NULL。一个例外是当 CharField 同时设置了 unique=True 和 blank=True 时。在这种情况下,需要 null=True 以避免在保存具有空白值的多个对象时违反唯一约束。

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 2021-11-17
        • 1970-01-01
        • 2010-10-18
        • 2013-04-27
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多