0

我想做的事情似乎很简单:我有一个 django 形式的 MultipleChoiceField,它在一个名为 Dico 的模型中提出所有书籍的 id 和 pseudo :

class FiltreMonoForm(forms.Form):
    dico_choices = []
    for dic in Dico.objects.all().order_by('pseudo'):
        dico_choices.append((dic.id, dic.pseudo))
    dico_choices=tuple(dico_choices)

    dicos = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple, choices=dico_choices, initial=[c[0] for c in dico_choices], label="Diccionaris sorsas")

我在视图中返回此表单:

def monollist(request):
    if request.GET:
        getcopy = request.GET.copy()
        form = FiltreMonoForm(getcopy)
        dicos = form.cleaned_data['dicos']
    else:
        form = FiltreMonoForm()

如果用户没有检查任何书籍,我希望检查所有书籍。就像是 :

if request.GET:
    getcopy = request.GET.copy()
    form = FiltreMonoForm(getcopy)
    dicos = form.cleaned_data['dicos']

    for dic in Dico.objects.all().order_by('pseudo'):
        dico_choices.append((dic.id, dic.pseudo))
    dico_choices=tuple(dico_choices)

    if len(dicos)==0:
        form['dicos']=dico_choices

但我找不到如何更改 MultipleChoicesField 的值。我试过了

form.data['dicos']=dico_choices

但似乎我只能给 form.data['dicos'] 一个值,它不会接受列表或元组。

我试图在我的表单中覆盖 __init__ 方法

self.data.update(dicos=dico_choices)

但我有同样的问题,只有当 dico_choices 是单个值时它才有效。

你知道如何用多个值覆盖我的 MultipleChoiceField 吗?

谢谢

4

1 回答 1

0

En Attendant de trouver une solution plus propre, j'ai édité directement le contenu de la copie de ma requête :

if 'dicos' not in getcopy:
            for dic in Dico.objects.all():
                getcopy.update({'dicos': dic.id})
于 2018-03-27T08:04:22.400 回答