Как сделать так, чтобы у одного пользователя было несколько пиков, но только у одного пика было 5 героев - DjangoModel - PullRequest
0 голосов
/ 26 марта 2020

Я знаю, что мне нужно. Проблема в том, что я понятия не имею, как это написать.

Я хочу, чтобы у пользователя, который регистрируется на сайте, могло быть несколько черновиков, например 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. Так что этот метод не подходит для моего случая.

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