我目前在Django中有一个模型,并且我已经制作了一个字段unique=True
,这样就不会向数据库提交任何副本。我的问题是它扩展到所有用户。我的意思是用户1应该能够提交"Example1“和"Example2”,再也不应该能够提交"Example1“或"Example2”,然后User2应该会出现,并且还能够提交“Example1E 210
”和“E 111
Example2E 212/code>”,但是他们不能提交,因为用户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')
发布于 2021-12-24 06:22:27
您需要使用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')
]
https://stackoverflow.com/questions/70469977
复制相似问题