Как получить доступ к некоторым данным перед сохранением формы django? - PullRequest
0 голосов
/ 02 мая 2019

Сейчас я строю менеджера турниров и блокирую шаг своей программы, потому что у меня недостаточно опыта в Django. Итак, по сути, у меня есть представление о том, как управлять системой добавления команд в турнире. У меня есть модель «Турнир», которая содержит поле, которое указывает количество команд, которые я могу иметь в категории («Категория» - это другое поле). Между категорией и турниром существует отношение «многие к одному». У меня также есть модель «Команда», и между Командой и Категорией существует отношение «многие к одному». Итак, мой вопрос: как я могу проверить, могу ли я добавить команду в категорию в зависимости от поля в «Турнире»? Я уточняю, что в двух разных турнирах может быть одна и та же категория.

views.py

def team_view(request, id, *args, **kwargs):
    tournaments = Tournament.objects.filter(user=request.user)
    tournament = Tournament.objects.get(pk=id)

    form_team = TeamCreationForm(request.POST or None)
    form_team.fields['category'].queryset = Category.objects.filter(tournament=tournament)

    if form_team.is_valid():

        form_team.save()
        form_team = TeamCreationForm()
        form_team.fields['category'].queryset = Category.objects.filter(tournament=tournament)

    context = {
        'tournaments': tournaments,
        'tournament': tournament,
        'form_team': form_team,
    }
    return render(request, "tournament_manage_team.html", context)

forms.py

class MyModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.description

class TeamCreationForm(forms.ModelForm):

    name                = forms.CharField(label='Name', widget=forms.TextInput(attrs={
                                    'class':'form-control',
                                    'placeholder': 'Enter the name of the team'}))
    category            = MyModelChoiceField(queryset=Category.objects.all(), widget=forms.Select(attrs={
                                    'class':'form-control'}))

    class Meta:
        model = Team
        fields = [
            'name',
            'category',
        ]

models.py

class Tournament(models.Model):
    name                = models.CharField(max_length=32)
    dateStart           = models.DateField(auto_now=False, auto_now_add=False)
    dateEnd             = models.DateField(auto_now=False, auto_now_add=False)
    nbMaxTeam           = models.IntegerField()
    # nameGymnasium     = models.CharField(max_length=32, blank=True, null=True)
    # addressGymnasium  = models.CharField(max_length=254, blank=True, null=True)
    sport               = models.ForeignKey(Sport, default=None, on_delete=models.CASCADE)
    user                = models.ForeignKey(CustomUser, default=None, on_delete=models.CASCADE)

class Category(models.Model):
    description = models.CharField(max_length=128)
    tournament  = models.ForeignKey(Tournament, default=None, on_delete=models.CASCADE) 

class Team(models.Model):
    name        = models.CharField(max_length=16)
    totalpoints = models.IntegerField(default=0)
    position    = models.IntegerField(default=0)
    matches     = models.ManyToManyField(Match, default=None, blank=True)
    category    = models.ForeignKey(Category, default=None, on_delete=models.CASCADE)

Полагаю, мне нужно проверить это методом is_valid(), но как я могу получить категорию, которую я выбрал в своей форме и которая связана с турниром, в котором я добавляю свою команду?

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