App 适用于 ModelChoiceField 但不适用于 ModelMultipleChoiceField

Posted

技术标签:

【中文标题】App 适用于 ModelChoiceField 但不适用于 ModelMultipleChoiceField【英文标题】:App works with ModelChoiceField but does not work with ModelMultipleChoiceField 【发布时间】:2019-11-16 06:06:21 【问题描述】:

我正在尝试在 django 页面中检索用户输入数据。但我无法选择多项选择领域。我已经尝试了多种没有缓解的方法。

self.fields['site'].queryset=forms.ModelMultipleChoiceField(queryset=sites.objects.all())

self.fields['site'] = forms.ModelChoiceField(queryset=sites.objects.filter(project_id=project_id))

self.fields['site'].queryset = forms.MultipleChoiceField(widget=forms.SelectMultiple, choice=[(p.id, str(p)) for p in sites.objects.filter(project_id =project_id)])

forms.py

类 SearchForm(forms.Form):

class Meta:
    model= images
    fields=['site']

def __init__(self,*args,**kwargs):
    project_id = kwargs.pop("project_id")     # client is the parameter passed from views.py
    super(SearchForm, self).__init__(*args,**kwargs)
    self.fields['site'] = forms.ModelChoiceField(queryset=sites.objects.filter(project_id=project_id))

views.py

def site_list(request, project_id):

form = SearchForm(project_id=project_id)
site_list = sites.objects.filter(project__pk=project_id).annotate(num_images=Count('images'))
template = loader.get_template('uvdata/sites.html')

if request.method == "POST":
    image_list=[]
    form=SearchForm(request.POST,project_id=project_id)
    #form=SearchForm(request.POST)
    #site_name=request.POST.get('site')
    if form.is_valid():
        site_name=form.cleaned_data.get('site')
        print(site_name)

我希望得到一个多选字段,但我最终得到了这个错误:

异常值:

'网站'

异常位置:/home/clyde/Downloads/new/automatic_annotator_tool/django_app/search/forms.py in init,第 18 行 (第 18 行:self.fields['site'].queryset = forms.MultipleChoiceField(widget=forms.SelectMultiple, choice=[(p.id, str(p)) for p in sites.objects.filter(project_id=project_id )]))

【问题讨论】:

欢迎来到 Stack Overflow! 【参考方案1】:

您没有正确定义表单。 documentation 向您展示了如何执行此操作。

在你的情况下,它会是这样的:

class SearchForm(forms.Form):

    site = forms.ModelMultipleChoiceField(queryset=Sites.object.none())

    def __init__(self,*args,**kwargs):
        project_id = kwargs.pop("project_id")
        super(SearchForm, self).__init__(*args,**kwargs)
        self.fields['site'].queryset = Sites.objects.filter(project_id=project_id))

您似乎还混淆了常规 FormModelForm,因为 Meta.model 仅用于 ModelForm,而您使用的是常规 Form。我建议您在继续之前阅读文档中的差异。

【讨论】:

以上是关于App 适用于 ModelChoiceField 但不适用于 ModelMultipleChoiceField的主要内容,如果未能解决你的问题,请参考以下文章

css 适用于WildPursuit的App.css

Flutter 应用中适用于 iOS 的 .app 文件在哪里?

App Action 适用于 App Actions 测试工具,但不适用于 Google Assistant

Django,ModelChoiceField() 和初始值

如何从两个模型填充 ModelChoiceField

对于大量选择,ModelChoiceField 都有哪些替代方法?