"unique = True" - Django 模型 - 每个用户都是唯一的,并不是每个人提交的所有数据都是唯一的
"unique = True" - Django models - Unique for each user not unique for all data submitted by everyone
我目前在 Django 中有一个模型,我创建了一个字段 unique=True
,这样就不会向数据库提交重复项。我的问题是它扩展到所有用户。我的意思是用户 1 应该能够提交“Example1”和“Example2”并且永远不能提交“Example1”或“Example2”,然后 User2 应该出现并且也能够提交“Example1”和"Example2" 但他们不能,因为用户 1 已经提交了它。
有没有什么方法可以让我获得某种程度的 unique=True
但对每个用户来说是分开的,而不是像现在这样只是连在一起。
提前致谢。代码如下。
问题出在type =
,我的用户也被 ForeignKey 定义。
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=200, blank=True, unique=True, null=True, verbose_name='Field')
class Meta:
ordering = ['-type']
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
更新后的有效代码
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=22, choices=FIELDS, verbose_name='Field')
class Meta:
ordering = ['-type']
constraints = [
models.UniqueConstraint(fields=['user', 'type'], name='unique type for each user')
]
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
您需要使用UniqueConstraint
:
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=200, blank=True, unique=True, null=True, verbose_name='Field')
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
class Meta:
ordering = ['-type']
constraints = [
models.UniqueConstraint(fields=['user', 'title'], name='unique title for each user')
]
我目前在 Django 中有一个模型,我创建了一个字段 unique=True
,这样就不会向数据库提交重复项。我的问题是它扩展到所有用户。我的意思是用户 1 应该能够提交“Example1”和“Example2”并且永远不能提交“Example1”或“Example2”,然后 User2 应该出现并且也能够提交“Example1”和"Example2" 但他们不能,因为用户 1 已经提交了它。
有没有什么方法可以让我获得某种程度的 unique=True
但对每个用户来说是分开的,而不是像现在这样只是连在一起。
提前致谢。代码如下。
问题出在type =
,我的用户也被 ForeignKey 定义。
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=200, blank=True, unique=True, null=True, verbose_name='Field')
class Meta:
ordering = ['-type']
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
更新后的有效代码
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=22, choices=FIELDS, verbose_name='Field')
class Meta:
ordering = ['-type']
constraints = [
models.UniqueConstraint(fields=['user', 'type'], name='unique type for each user')
]
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
您需要使用UniqueConstraint
:
class Field_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Field_Repo1", on_delete=models.PROTECT)
title = models.CharField(max_length=20, verbose_name='Title of Field')
type = models.CharField(max_length=200, blank=True, unique=True, null=True, verbose_name='Field')
def __str__(self):
return str(self.user) or 'NONE'
def get_absolute_url(self):
return reverse('repo1')
class Meta:
ordering = ['-type']
constraints = [
models.UniqueConstraint(fields=['user', 'title'], name='unique title for each user')
]