Django Models如何添加唯一约束
Posted
技术标签:
【中文标题】Django Models如何添加唯一约束【英文标题】:Django Models how to add unique constraint 【发布时间】:2021-04-01 22:27:42 【问题描述】:与 this 的情况不同,我试图只允许一个用户在数据库中输入一个条目:
class Station(models.Model):
serial = models.CharField("serial", max_length = 31, unique = True)
user = models.ForeignKey(User, on_delete = models.CASCADE, )
我想要的是一个用户只能有零个或一个站(串行)。
【问题讨论】:
【参考方案1】:这可以使用one-to-one relationship 来实现。这意味着用户可以拥有零个或恰好一个站点。
class Station(models.Model):
serial = models.CharField("serial", max_length = 31, unique = True)
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
)
【讨论】:
我可以编辑用户在尝试添加第二个序列时看到的消息吗? 我认为这取决于您的用例。您使用的是模型表单、Django Rest 框架还是其他? 我更多地考虑了 admin tbh。【参考方案2】:您可以在 ForeignKey 上设置unique=true
,
但你确实有错误的关系类型,因为你应该有One-to-one
一对一的关系。从概念上讲,这类似于 具有 unique=True 的 ForeignKey,但关系的“反向”端 将直接返回单个对象。
class Station(models.Model):
serial = models.CharField("serial", max_length=31, unique=True)
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
null=True,
blank=True
)
【讨论】:
以上是关于Django Models如何添加唯一约束的主要内容,如果未能解决你的问题,请参考以下文章
django:IntegrityError:重复键值违反唯一约束