Как сделать целый ряд уникальным в Джанго - PullRequest
0 голосов
/ 08 октября 2019

Итак, у меня есть модель User и модель Community. Теперь, чтобы проверить, присоединился ли пользователь к сообществу, у меня есть модель UserJoinedCommunity. Имеет поля user и community. Примерно так:

class UserJoinedCommunity(models.Model):
    """DB Model for users joined communities"""
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    community = models.ForeignKey(Community, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.user.username}|{self.community.name}"

Итак, я хочу сделать всю строку уникальной, чтобы пользователь не мог "присоединиться к сообществу несколько раз". Таким образом, если идентификатор пользователя равен 3 и он присоединится к сообществу с идентификатором 5, он создаст запись, например. {user: 3, community: 5}. Я хочу, чтобы он был уникальным, чтобы его нельзя было создать снова.

1 Ответ

1 голос
/ 08 октября 2019

То, что вы ищете, это unique_together.

class UserJoinedCommunity(models.Model):
    """DB Model for users joined communities"""
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    community = models.ForeignKey(Community, on_delete=models.CASCADE)

    class Meta:
        unique_together = ['user', 'community']

    def __str__(self):
        return f"{self.user.username}|{self.community.name}"

Обратите внимание, что это создаст ограничение в базе данных. Это не ограничение уровня приложения. Другими словами, вам все равно придется обрабатывать IntegrityError самостоятельно.

Подробнее здесь

...