如何制作唯一的对象(每个字段不唯一)
名称:本田
类别:汽车
名称:本田
类别:自行车
名称:本田
类别:自行车
如果我在现场使用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
答案 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”)
]