【发布时间】:2016-01-23 07:37:37
【问题描述】:
我在使用 Sqlite 的开发机器中使用 Django 1.8.4,我有这些模型:
class ModelA(Model):
field_a = CharField(verbose_name='a', max_length=20)
field_b = CharField(verbose_name='b', max_length=20)
class Meta:
unique_together = ('field_a', 'field_b',)
class ModelB(Model):
field_c = CharField(verbose_name='c', max_length=20)
field_d = ForeignKey(ModelA, verbose_name='d', null=True, blank=True)
class Meta:
unique_together = ('field_c', 'field_d',)
我已经运行了正确的迁移并在 Django Admin 中注册了它们。所以,使用管理员我已经完成了这个测试:
- 我能够创建 ModelA 记录,但 Django 禁止我创建重复记录 - 正如预期的那样!
- 当 field_b 不为空时,我无法创建相同的 ModelB 记录
- 但是,当使用 field_d 为空时,我能够创建相同的 ModelB 记录
我的问题是:如何将 unique_together 应用于可为空的 ForeignKey?
我为这个问题找到的最新答案是 5 年...我确实认为 Django 已经发展,问题可能不一样。
【问题讨论】:
-
@Ivan 我也尝试过这篇文章,但它对模型表单集没有帮助。当试图在同一个表单集中创建相同的记录时,Django 并不禁止。用户仍然可以创建重复项
-
“当 field_b 不为空时,我无法创建相同的 ModelB 记录”您的意思是“field_d”吗?
标签: django django-models django-forms django-validation