Как ограничить количество вариантов в моей модели, которые пользователь может сохранить? - Python Django - PullRequest
1 голос
/ 24 марта 2020

У меня есть модель UserDraft. Внутри этой модели у меня есть pick_id с различными вариантами, представленными в числах, когда u go в Django Admin. Я хочу, чтобы каждый выбор был ограничен до 5 раз для каждого выбранного пользователя.

Например, в этом коде я хочу, чтобы user1, 1, hero1, user1, 1, hero2, et c .... Также я хотел бы ограничить то, что вы не можете выбрать одного и того же героя дважды.

models.py

from django.db import models
from users.models import User
from heroes.models import Hero
from django.core.exceptions import ValidationError


class UserDrafts(models.Model):
    FIRST = "1"
    SECOND = '2'
    THIRD = '3'
    PICK_ID = [
        (FIRST, 1),
        (SECOND, 2),
        (THIRD, 3),
    ]
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_id")
    pick_id = models.CharField(max_length=20, choices=PICK_ID)
    hero_id = models.ForeignKey(Hero, on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        if self.__class__.objects.filter(user_id=self.user_id).count() >= 5:
            raise ValidationError('Maximum five picks are allowed per user')
        return super().save(*args, **kwargs)

    def __str__(self):
        return self.user_id.username

    class Meta:
        verbose_name = "UserDraft"
        verbose_name_plural = "UserDrafts"

Этот метод сохранения, который я использовал, ограничивает выбор пользователя более 5 раз. Но я также хочу иметь возможность ограничить выбор для каждого выбора, который будет выбран 5 раз на 1 пользователя ... Таким образом, максимальное количество пиков будет 15. 5 pick_id`s будет 1 (FIRST), 5 будет 2 (SECOND). ), и 5 будет 3 (ТРЕТЬЯ).

Я все обыскал и не нашел решения.

Также я использую postgresql в качестве базы данных.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...