Форма ModelMultipleChoiceField возвращает null [IntegrityError]

Используется Django 4.0.5, Python 3.10.5.

Я создал форму, которая должна возвращать объект модели "матч". Он правильно отображает "игроков" для выбора на форме, но после попытки сохранить его я получаю IntegrityError, что я якобы нарушаю мое ограничение not-null. Ниже приведены детали сбойной строки:

DETAIL: Неудачная строка содержит (2bc3f5f6-3249-4823-ae76-90fe44dc9c89, 2022-09-09, null, null).

Значения, которые я передаю, это UUID, дата и две команды, которые являются полями ManyToManyFields, содержащими объекты Player. Я не могу понять, почему оба поля команд возвращают null. Любая помощь будет принята с благодарностью, выкладываю соответствующий код ниже. Если потребуется что-то кроме этого, я обновлю его.

forms.py [соответствует приложению]

class PlayerChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj: Player) -> str:
        return obj.nickname


class MatchForm(forms.ModelForm):
    date = forms.DateField(widget=forms.SelectDateWidget(), initial=datetime.date.today, label="Match Date")
    blackTeamPlayers = PlayerChoiceField(queryset=Player.objects.all(), widget=forms.CheckboxSelectMultiple)
    whiteTeamPlayers = PlayerChoiceField(queryset=Player.objects.all(), widget=forms.CheckboxSelectMultiple)


class Meta:
    model = Match
    fields = ['date', 'blackTeamPlayers', 'whiteTeamPlayers']

models.py [matches app]

class Match(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    date = models.DateField(null=False)
    blackTeamPlayers = models.ManyToManyField(
        Player, related_name='%(class)s_black_team_players'
    )
    whiteTeamPlayers = models.ManyToManyField(
        Player, related_name='%(class)s_white_team_players'
    )

views.py [соответствует приложению, соответствующая часть]

class MatchCreateView(CreateView):
    template_name: str = 'add_match.html'
    form_class = MatchForm
    queryset = Match.objects.all()

    def form_valid(self, form):
        return super().form_valid(form)

models.py [players app]

class Player(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    firstname = models.CharField(max_length=25)
    lastname = models.CharField(max_length=25)
    nickname = models.CharField(max_length=50)

    def get_absolute_url(self):
        return reverse("players:player_details", kwargs={"id": self.id})

Оказывается, ответ был тривиальным, в коде все в порядке. Пожалуйста, не забывайте makemigrations после игры с вашими моделями...

Вернуться на верх