Я знаю, что мне нужно. Проблема в том, что я понятия не имею, как это написать.
Я хочу, чтобы у пользователя, который регистрируется на сайте, могло быть несколько черновиков, например draft1, draft2, draft3, et c. но во всех черновиках не может быть более 5 героев.
В моем posgre sql у меня есть один пользователь и 119 героев, у которых есть свои идентификаторы.
Я пробовал что-то вроде это:
models.py
from django.db import models
from users.models import User
from heroes.models import Hero
from django.core.exceptions import ValidationError
class UserPick(models.Model):
draft = models.IntegerField()
def __str__(self):
return str(self.draft)
def save(self, *args, **kwargs):
if self.__class__.objects.filter(draft=self.draft).count() >= 5:
return None
return super().save(*args, **kwargs)
class UserDrafts(models.Model):
user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_id")
pick = models.ForeignKey(UserPick, on_delete=models.CASCADE)
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 героев. или это ошибка будет брошена.
Я пытаюсь понять это в своей голове, но это не сработает:)
Я имею в виду, что мне нужна таблица с надписью
- user1 , draft1, hero1,
- user1, draft1, hero23,
- user1, draft1, hero34,
- user1, draft1, hero55,
user1, draft1, hero118,
user1, draft2, hero5,
- user1, draft2, hero4,
- user1, draft2, hero80,
- user1, draft2, hero3,
user1, draft2, hero99,
user1, draft3, hero12,
- user1, draft3, hero25,
- user1, draft3, hero34,
- user1, draft3, hero53,
- user1, draft3 , hero113,
Также тот же герой не может быть выбран в том же проекте.
Помогите, ребята.
EDIT: этот метод сохранения в UserDrafts работает, но его ограничение этот пользователь может иметь до 5 драфтов. Он игнорирует, что черновики имеют разные идентификаторы, он объединяет их все до 5. Так что этот метод не подходит для моего случая.