django 唯一对象(不是唯一字段)?
django unique object (not unique field)?
如何制作唯一对象(每个字段不是唯一的)
例如:
名称:本田
类别:汽车
成功
名称:本田
类别:自行车
成功
名称:本田
类别:自行车
失败,因为所有字段对另一个对象具有相同的值
如果我在现场使用 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
您应该使用具有 unique_together 属性的 Meta class: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
Django 提供了一个名为 unique together 的 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”)
]
如果您正在使用保存
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
# Here is save
def save(self, force_insert=False, force_update=False):
# Whatever you need to do
if not Brand.objects.filter(name__iexact=self.name).exists():
super(Brand, self).save(force_insert, force_update)
就我而言
class Category(models.Model):
name = CICharField(max_length=255, unique=True, error_messages={'unique':"This category has already been registered."})
def __str__(self):
return self.name
def get_absolute_url(self):
# return reverse('article-detail', args=(str(self.id)) )
return reverse('home')
def save(self, force_insert=False, force_update=False):
self.name = self.name.lower()
self.name = capitalizeFirtChar(self.name)
# If the name already exists
if not Category.objects.filter(name__iexact=self.name).exists():
super(Category, self).save(force_insert, force_update)
如何制作唯一对象(每个字段不是唯一的)
例如:
名称:本田
类别:汽车
成功
名称:本田
类别:自行车
成功
名称:本田
类别:自行车
失败,因为所有字段对另一个对象具有相同的值
如果我在现场使用 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
您应该使用具有 unique_together 属性的 Meta class: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
Django 提供了一个名为 unique together 的 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”)
]
如果您正在使用保存
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
# Here is save
def save(self, force_insert=False, force_update=False):
# Whatever you need to do
if not Brand.objects.filter(name__iexact=self.name).exists():
super(Brand, self).save(force_insert, force_update)
就我而言
class Category(models.Model):
name = CICharField(max_length=255, unique=True, error_messages={'unique':"This category has already been registered."})
def __str__(self):
return self.name
def get_absolute_url(self):
# return reverse('article-detail', args=(str(self.id)) )
return reverse('home')
def save(self, force_insert=False, force_update=False):
self.name = self.name.lower()
self.name = capitalizeFirtChar(self.name)
# If the name already exists
if not Category.objects.filter(name__iexact=self.name).exists():
super(Category, self).save(force_insert, force_update)