Django Forms - 该选择不是可用的选择之一

kak*_*akk 5 python django django-forms django-views

我有一个用于更新用户的表单,错误出现在角色字段上。我正在根据客户过滤角色。我得到了正确的角色值,但无论如何都会弹出错误。

Select a valid choice. That choice is not one of the available choices

视图.py

class UserUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    form_class = UserUpdateForm
    template_name = 'users/modals/update_profile_modal.html'
    success_message = "User updated successfully."

    def get_form_kwargs(self):
        kw = super().get_form_kwargs()
        kw['request'] = self.request
        return kw

    def get_object(self, *args, **kwargs):
        user_id = self.request.session['user_detail']
        return TbUser.objects.get(id=user_id)

    def form_invalid(self, form):
        messages.error(self.request, form.errors)
        print(form.errors)
        return redirect('user-detail', pk=self.object.pk)

    def get_success_url(self):
        return reverse('user-detail', kwargs={'pk': self.object.pk})
Run Code Online (Sandbox Code Playgroud)

表格.py

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request
        if request.user.customer:
            self.fields['department'].queryset = TbDepartment.objects.filter(
                customer=request.user.customer)
            self.fields['role'].queryset = TbRole.objects.filter(
                customer=request.user.customer)
        self.fields['username'].required = True
        self.fields['real_name'].required = True
        self.fields['email'].required = True
        self.fields['cellphone'].required = True
        self.fields['department'].required = True
        self.fields['role'].required = True

    class Meta:
        model = TbUser
        fields = ['username', 'real_name', 'email',
                  'cellphone', 'department', 'role']
Run Code Online (Sandbox Code Playgroud)

我正在使用此类过滤所有数据,每个客户在表中都有自己的行。

class UserUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    form_class = UserUpdateForm
    template_name = 'users/modals/update_profile_modal.html'
    success_message = "User updated successfully."

    def get_form_kwargs(self):
        kw = super().get_form_kwargs()
        kw['request'] = self.request
        return kw

    def get_object(self, *args, **kwargs):
        user_id = self.request.session['user_detail']
        return TbUser.objects.get(id=user_id)

    def form_invalid(self, form):
        messages.error(self.request, form.errors)
        print(form.errors)
        return redirect('user-detail', pk=self.object.pk)

    def get_success_url(self):
        return reverse('user-detail', kwargs={'pk': self.object.pk})
Run Code Online (Sandbox Code Playgroud)

我正在使用渲染表单{{form|crispy}}

{% block modal %}
{% load static %}
{% load crispy_forms_tags %}

<!-- Modal -->
<div class="modal fade" data-backdrop="static" data-keyboard="false" id="tb-user-profile-update-modal" tabindex="-1"
    role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-sm" role="document">
        <div class="modal-content">
            <form enctype="multipart/form-data" action="{% url 'tb-user-update' pk=user.id %}" method="POST">
                <div class="row d-flex justify-content-center">
                    <div class="col-10">
                        <fieldset class="form-group mt-2">
                            {{user.username}}
                            {% csrf_token %}
                            {{form|crispy}}
                        </fieldset>
                        <div class="form-group">
                            <button class="btn btn-secondary" type="submit">
                                <span>Update</span>
                            </button>
                            <button class="btn btn-secondary" type="button" data-dismiss="modal">
                                <span>Close</span>
                            </button>
                        </div>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
{% endblock modal %}
Run Code Online (Sandbox Code Playgroud)

kak*_*akk 0

我已经删除了角色功能,它在我的项目中是多余的。