【问题标题】:Django Forms - That choice is not one of the available choicesDjango Forms - 该选择不是可用的选择之一
【发布时间】:2021-09-10 12:10:48
【问题描述】:

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

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

views.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})

forms.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']

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

class TbCustomer(models.Model):
    id = models.CharField(primary_key=True, max_length=50)
    short_name = models.CharField(max_length=255)
    names = models.CharField(max_length=255)
    descs = models.CharField(max_length=255, blank=True, null=True)
    creat_time = models.DateTimeField()
    creat_user = models.CharField(max_length=255)
    authenticationcode = models.CharField(
        db_column='authenticationCode', max_length=255, blank=True, null=True)
    is_available = models.IntegerField(blank=True, null=True)
    logo_img = models.CharField(max_length=40, blank=True, null=True)
    response_message = models.CharField(max_length=100, blank=True, null=True)
    language = models.CharField(max_length=20, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'tb_customer'

    def __str__(self):
        return '%s' % self.short_name

我正在使用 {{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 %}

【问题讨论】:

  • 这是一个 ModelForm ...我猜角色是一个 FK,request.user.customer 的值是多少,您传入的查询集是否有您从 @ 获得的客户987654328@ attr?
  • 我已经更新了问题,客户过滤器工作正常。它是使用客户过滤角色的下拉选项。我不知道为什么这些选择无效,因为选择是角色对象。 @ViaTech
  • 显示您的模板update_profile_modal.html,您如何呈现表单?...
  • 我正在使用{{form|crispy}} 呈现表单,我现在将更新问题

标签: python django django-views django-forms


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 2021-04-12
    • 2017-12-30
    • 2016-05-18
    • 2014-06-24
    • 2012-01-22
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多