我可以在Django模型中使外键字段可选

use*_*er1 98 django django-models

我有这个代码

subject      = models.ForeignKey(subjects)
location     = models.ForeignKey(location)
publisher    =  models.ForeignKey(publisher)
Run Code Online (Sandbox Code Playgroud)

我不总是有三种价值观的书.所以有时如果我不知道主题或位置,或出版商.然后我想让它们空着

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

Abi*_*d A 174

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

subject = models.ForeignKey(subjects, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

  • @WardC两者的组合是如此频繁,因为通常如果你要允许表单中的字段为空,那么你还需要你的数据库允许该字段的NULL值.例外是CharFields和TextFields,它们在Django中永远不会保存为NULL.空值作为空字符串('')存储在DB中. (10认同)
  • @Ward,两者都不需要.仅使用`null = True`就足够了. (6认同)
  • `blank = True`对于表单验证很重要.它将允许空字符串作为此字段中的用户输入.`null = True`将允许数据库列中的*NULL*值. (6认同)
  • 两者都需要吗?使用null = True会有什么缺点? (5认同)
  • @WardC见https://docs.djangoproject.com/en/1.9/ref/models/fields/#blank (3认同)

Muh*_*air 11

为了实现这一点,论证与和 一起on_delete是必要的,如果这样做会更好。blank=Truenull=True

subject = models.ForeignKey(subjects, on_delete=models.SET_NULL, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)