У меня есть модель 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 в качестве базы данных.
Спасибо.