"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')
        ]
Вернуться на верх