Данные не сохраняются при использовании виджета FIlteredSelectMultiple

forms.py

class RegistrationCreateForm(forms.Form):
    player = forms.ModelChoiceField(queryset=Player.objects.all(), 
    widget=FilteredSelectMultiple("Player", is_stacked=False))
    def __init__(self, *args, **kwargs):
        super().__init__()

    class Meta:
        model = Registration
        fields = ['player']

    @property
    def media(self):
        w1 = FilteredSelectMultiple("", False)
        form_media = forms.Media(js=['js/jsi18n.js'], css={'all': ['css/filtered.css']})
        return (w1.media + form_media )

views.py

class RegistrationCreateView(AccessControlMixin, CreateView):
    model = Registration
    form_class = RegistrationCreateForm
    template_name_suffix = '_create'

    def has_access(self, user):
        return self.can("create_registration", self.tournament)

    def get_success_url(self):
        return "%s" % reverse("tournaments:detail",
                          kwargs={"pk": self.kwargs['pk']})

    def dispatch(self, request, *args, **kwargs):
        """
        Overridden so we can make sure the `Tournament` instance exists
        before going any further.
        """
        self.tournament = get_object_or_404(Tournament, pk=kwargs['pk'])
        return super(RegistrationCreateView,
                 self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        self.tournament = get_object_or_404(Tournament, pk=self.kwargs['pk'])
        context = super(RegistrationCreateView,
                    self).get_context_data(**kwargs)
        context['tournament'] = self.tournament
        return context

    def form_valid(self, form):
        form.instance.tournament = self.tournament
        form.instance.created_by = get_request().user

        player_institution_relation = PlayerInstitution.objects.filter(Q(player= form.instance.player) & Q(institution = self.tournament.owner))
        if player_institution_relation.exists():
            number_of_objects = player_institution_relation.count()
            if number_of_objects>1:
                for player_inst in player_institution_relation[1:]:
                    player_inst.delete()
        else:
            PlayerInstitution.objects.create(player=form.instance.player, institution=self.tournament.owner)
    
        return super(RegistrationCreateView, self).form_valid(form)

    def get_form(self, *args, **kwargs):
        tournament = get_object_or_404(Tournament, pk=self.kwargs['pk'])
        form = super(RegistrationCreateView, self).get_form(*args, **kwargs)
        #Remove any player that has already a registration
        if get_request().user.name_format == 'First name Last name':
            form.fields['player'].queryset = tournament.available_players.order_by("first_name","last_name")
        else:
            form.fields['player'].queryset = tournament.available_players.order_by("last_name","first_name")

        return form

forms.py

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load i18n %}
{% load static %}
{% block extrahead %}
{{ form.media }}
{% endblock %}

{% block content %}
<div class="container">
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<div class="col">
  <h2>{% block form_title %}{% endblock %}</h2>
</div>
</div>
<div class="row">
<div class="col mb-5">
  <form class="form-horizontal" method="post" action="{% block form_action %}{% endblock %}">
    {% csrf_token %}
    {{ form|crispy }}
    <div class="control-group">
      <div class="controls">
        <button type="submit" class="btn btn-primary" id="btn-save">{% block form_button %}{% endblock %}</button>
        <a class="btn btn-secondary" href="{% block form_cancel_action %}{% endblock %}">Cancel</a>
      </div>
    </div>
  </form>
  </div>
 </div>
{% endblock %}

Я использую виджет FilteredSelectMultiple для поля внешнего ключа. Он отображает форму так, как я хочу, но когда я выбираю и сохраняю содержимое. Он перенаправляет меня на ту же страницу без сохранения содержимого в базе данных. Я хочу, чтобы выбранные отношения были сохранены в моей регистрационной таблице. Может ли кто-нибудь помочь мне с этим?

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