"unique = True" - модели Django - Уникальные для каждого пользователя, не уникальные для всех данных, представленных всеми.
В настоящее время у меня есть модели в Django, и я сделал поле "unique=True", чтобы в базу данных не попадали дубликаты. Моя проблема в том, что оно распространяется на всех пользователей. Под этим я подразумеваю, что пользователь 1 должен иметь возможность отправить "Example1" и "Example2" и никогда не должен иметь возможность отправить "Example1" или "Example2" снова, а затем должен появиться пользователь 2 и также иметь возможность отправить "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')
Вам необходимо использовать 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')
]