首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-Select2 2重型Widget

Django-Select2 2重型Widget
EN

Stack Overflow用户
提问于 2020-04-23 19:19:41
回答 2查看 1.1K关注 0票数 4

我第一次尝试实现Django-select2 2.我引用了他们的文档和一些堆栈溢出解决方案来实现它.我设法使ajax功能正常工作,而且我能够选择多个选择.然而,当我提交和验证表单时,会出现类似于-> "Select getting . 123456不是可用的选择之一.“之类的错误。

我不明白我做错了什么.

这是我的表格.

代码语言:javascript
复制
class MyCustReqForm(forms.ModelForm):
    initial_customer = forms.MultipleChoiceField(
            widget=HeavySelect2MultipleWidget(data_view='customer_ajax',
                                              attrs={'data-minimum-input-length': 4, 'delay':200},
                                              model=Customer),

    )
    end_customer = forms.MultipleChoiceField(
            widget=HeavySelect2MultipleWidget(data_view='customer_ajax',
                                              attrs={'data-minimum-input-length': 4, 'delay':200},
                                              model=Customer),

    )

    class Meta:
        model = Workflow_Customer
        fields = [ 'initial_customer', 'end_customer' ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['initial_customer'].widget.attrs.update({'style': 'width:100%', 'data-placeholder': 'Select Customer'})
        self.fields['end_customer'].widget.attrs.update({'style':'width:100%', 'data-placeholder':'Select end customer'})

函数下面的和customer_ajax视图调用.

代码语言:javascript
复制
def customer_select2(request):
    term = request.GET.get("term", None)
    if term:
        res = list(Customer.objects.filter(Q(customer_number__contains=term) | Q(customer_name__contains=term)).values('id', 'customer_number', 'customer_name'))[:10]
    if res:
        result = [{'id': value['id'], 'text': value['customer_number'] + ' ' + value['customer_name'] } for index, value in enumerate(res)]

        return JsonResponse({'err': 'nil', 'results': result}, safe=False)

return JsonResponse(data={'success': False, 'errors': 'No mathing items found'})

当我签入调试模式时。我发现选择是空的..。

我感谢你的快速帮助..。如果可能的话,请提供一个完整的示例来解释如何定义和查看Ajax函数.

EN

回答 2

Stack Overflow用户

发布于 2021-01-22 00:00:55

这是因为当您发送表单时,没有初始的选择,所以所选的选项不会通过验证。发送表单时,初始化类MyCustReqForm,此时您必须执行请求才能获得表单字段的选择。这些选择必须包含你选择的选项。例如:

当请求是'GET'时,没有问题,但是在请求中'POST'是有一些基本选项所必需的。

PD:对不起我的英语

票数 1
EN

Stack Overflow用户

发布于 2022-04-09 05:59:09

解决方案是编写自定义的清洁方法,这样您就可以为字段定义自己的验证,从而为选择字段覆盖django表单验证。

代码语言:javascript
复制
def clean_initial_customer(self):
  choices = self.cleaned_data["initial_customer"]
  # write your custom logics and remove any errors

如果在实现过程中发现了问题,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61395317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档