Django post-form не может пройти валидацию при использовании формы с дополнительными входами

У меня есть форма, содержащая af MultipleChoiceField, где варианты выбора создаются динамически на основе данного пользователя

class UpdateForm(forms.Form):
    def __init__(self,names,*args,**kwargs):
        super(UpdateForm,self).__init__(*args,**kwargs)
        self.fields["list_names"] = forms.MultipleChoiceField(choices = zip(names,names),widget=forms.CheckboxSelectMultiple,label="Pick some names")

    add_new = forms.BooleanField(initial=True, label="Add new names?",required=False)
    delete_missing = forms.BooleanField(label = "Delete names?",required=False)

и он работает нормально как GET-запрос, проблемы возникают с пост-запросом:

Мое мнение следующее:

def update(request):
    user = request.user
    list_names = MyModel.objects.filter(user=user).all().values_list("nick_name",flat=True).distinct()
    form = UpdateWishlistForm(names =list_names)

    if request.method == "POST":
        post_form = UpdateForm(request.POST)    
        if post_form.is_valid():
            list_names = post_form.cleaned_data["list_names"] 
            add_new = post_form.cleaned_data["add_new"]
            delete_missing = post_form.cleaned_data["delete_missing"]

            messages.success(request, "Success")
            context = {
                "form":form,
            }

            redirect("home")
        else:
            #invalid post_form
            messages.error(request, "Error")
            context = {
                "form":form,
            }
            return render(request, "discounttracker/update.html")        
    else: #Get request
        context = {
            "form":form,
        }
        
    return render(request, "myapp/update.html",context=context)

post_form = UpdateForm(request.POST) не подтверждается, а post_form.errors пуст.

Хотя в нем содержатся данные (до вызова post_form.is_valid())

print(post_form)
# UpdateForm: <UpdateForm bound=False, valid=Unknown, fields=(add_new;delete_missing;list_names)>

print(request.POST.dict())
#<QueryDict: {'csrfmiddlewaretoken': ['...'], 'add_new': ['on'], 'list_names': ['test_name_1']}>

но я замечаю, что он не связан, поэтому не валидируется. Но я не могу понять, почему он не "связывается" при разборе request.POST?

В POST-запросе необходимо также передать имена, поэтому:

list_names = MyModel.objects.filter(user=user).values_list("nick_name",flat=True).distinct()
form = UpdateWishlistForm(names=list_names)
if request.method == 'POST':
    post_form = UpdateForm(names=list_names, data=request.POST)
    # …
# …

Но я бы посоветовал работать с ModelMultipleChoiceField [Django-doc] и таким образом передавать queryset. Поскольку имена ников, очевидно, могут содержать дубликаты, возможно, лучше сделать модель Nickname и использовать ForeignKey к этой модели.

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