Сейчас я строю менеджера турниров и блокирую шаг своей программы, потому что у меня недостаточно опыта в 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()
, но как я могу получить категорию, которую я выбрал в своей форме и которая связана с турниром, в котором я добавляю свою команду?