Python django唯一对象(非唯一字段)?

Python django唯一对象(非唯一字段)?,python,django,postgresql,django-2.2,Python,Django,Postgresql,Django 2.2,如何创建唯一对象(不是每个字段唯一) 例如: 姓名:本田 类别:汽车 成功 姓名:本田 类别:自行车 成功 姓名:本田 类别:自行车 失败,因为所有字段对另一个对象具有相同的值 如果我在字段中使用unique,则第二个案例将失败,因为本田(名称)已经创建 我的代码: class Category(models.Model): name = models.CharField(max_length=127,unique=True) def __str__(self):

如何创建唯一对象(不是每个字段唯一)

例如: 姓名:本田

类别:汽车

成功 姓名:本田

类别:自行车

成功 姓名:本田

类别:自行车

失败,因为所有字段对另一个对象具有相同的值 如果我在字段中使用
unique
,则第二个案例将失败,因为本田(名称)已经创建

我的代码:

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

您应该使用具有唯一属性的元类:


Django提供了一个名为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”]]
Django文档指出这可能会被弃用,并建议使用功能更全面的UniqueConstraint元选项

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

文档确实指出这可能会被弃用,并建议使用constraints=>UniqueConstraintthanks bro,如果您从django.db添加
,可能会更好。models import UniqueConstraint
这是django 2.2中新增的:
class Meta:
    constraints = [
        UniqueConstraint(fields=[“name”,”category”], name=“unique_object”)
    ]