"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')
        ]