【发布时间】:2022-01-24 21:54:51
【问题描述】:
我目前在 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')
【问题讨论】:
-
如果 user1 创建了 example1 那么 user2 也可以创建 example1 但 user2 不能再次创建 example1?那是你要的吗?每个用户都应该只有自己的唯一标题?
-
unique_together元选项...? -
@Mirza715 该链接有点帮助,我不知道我是如何在研究中没有偶然发现它的,但它以一种截然不同的方式定义用户,我已经围绕一个不同的定义方式,并且只能将该方法用作最后的努力。不过谢谢。
-
@MojixCoder 是的,这正是我正在寻找的。对不起,我很难措辞。
标签: django unique web-deployment