【问题标题】:Django Models how to add unique constraintDjango Models如何添加唯一约束
【发布时间】: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, )

我想要的是一个用户只能有零个或一个站(串行)。

【问题讨论】:

    标签: django django-models


    【解决方案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
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      相关资源
      最近更新 更多