django唯一对象(不是唯一字段)?

时间:2019-07-12 00:53:35

标签: python django postgresql django-2.2

如何制作唯一的对象(每个字段不唯一)

例如:

名称:本田

类别:汽车

成功

名称:本田

类别:自行车

成功

名称:本田

类别:自行车

失败,因为所有字段对另一个对象具有相同的值

如果我在现场使用unique,则第二种情况将失败,因为已经创建了coz honda(名称)

我的代码:

class Category(models.Model):
    name = models.CharField(max_length=127,unique=True)

    def __str__(self):
        return self.name


class Brand(models.Model):
    name = models.CharField(max_length=127,unique=True)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)         

    def __str__(self):
        return self.name

2 个答案:

答案 0 :(得分:1)

您应该使用具有unique_together属性的Meta类:https://docs.djangoproject.com/en/2.2/ref/models/options/#unique-together

class Brand(models.Model):
    name = models.CharField(max_length=127)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)

    class Meta:
        unique_together = ['name', 'category']

    def __str__(self):
        return self.name

答案 1 :(得分:1)

Django提供了一个称为unique的Meta选项,似乎可以满足以下用例:

class Brand(models.Model):
    name = models.CharField(max_length=127)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    class Meta:
        unique_together = [[“name”, “category”]]

Django文档指出此方法可能已被弃用,并推荐功能更全的UniqueConstraint元选项

class Meta:
    constraints = [
        UniqueConstraint(fields=[“name”,”category”], name=“unique_object”)
    ]