2

異なるエントリを持つことができるフォームセットを更新したいと考えています。正しいデータが事前に入力されたフォームセットを表示できますが、更新されずに新しいインスタンスが作成されるため、何か間違っています..

inlineformset_factoryが表示されますが、フォームセットに複数の値を渡しているため、操作できませんでした..

誰かがポインタを持っていれば、本当に感謝します!

ビュー.py

    epis = Contact.objects.filter(episode=int(value))

    ContactSet = formset_factory(Contact1Form, extra=len(epis), max_num=len(epis))
    if request.method =='POST':
        formset = ContactSet(request.POST)
        if formset.is_valid():
            for form in formset.forms:
                age = form.cleaned_data['age']
                bcg = form.cleaned_data['bcg_scar']
                radio = form.cleaned_data['radiology']

                profile = form.save(commit=False)
                for i in epis:
                    profile.contact = i

                fields = {'age': age, 'bcg_scar': bcg, 'radiology': radio}

                for key, value in fields.items():
                    if value == u'':
                        setattr(profile, key, None)
                    else:
                        setattr(profile, key, value)

                profile.save()
        return render_to_response('success.html', {'location': location})
    else:
        dic = []
        for c in epis:
            aux = {}
            for f in c._meta.fields:
                if f.name not in ['contact_id', 'episode']:
                    aux[f.name] = getattr(c, f.name)
            dic.append(aux)

        formset = ContactSet(initial=dic)
    return render_to_response('form.html',
            {   'msg': msg,
                'location': location,
                'formset': formset,
                'word': word })

フォーム.py

  class ContactForm(forms.ModelForm):
        affinity = forms.ModelChoiceField(queryset=Affinity.objects.all(),
                  label=ugettext("Affinity"))
        age = forms.IntegerField(label=ugettext("Age when diagnosed"),
                  required=False)

        MAYBECHOICES = (
            ('', '---------'),
            (ugettext('Yes'), ugettext('Yes')),
            (ugettext('No'), ugettext('No')))

        bcg_scar = forms.ChoiceField(choices=MAYBECHOICES, label=ugettext(
                  "BCG scar"), required=False)
        radiology = forms.ModelChoiceField(queryset=Radiology.objects.all(),
                 label=ugettext("Radiology"),required=False)

    class Meta:
         model = Contact

どんなポインタでも大いに役立ちます!

編集

キャサリンからのいくつかの提案の後

  formset = ContactSet(request.POST, queryset=epis)

このエラーが発生しました:

  __init__() got an unexpected keyword argument 'queryset'

変えてみます

 from django.forms.models import modelformset_factory
 ContactSet = modelformset_factory(Contact1Form, extra=len(epis), max_num=len(epis))

このエラーが表示されました:

'ModelFormOptions' object has no attribute 'many_to_many'

このエラーを解決するには、代わりにモデルの名前を使用する必要があることがわかりました。

ContactSet = modelformset_factory(Contact, extra=len(epis), max_num=len(epis))

そして私は MultiValueDictKeyError を取得します

4

2 に答える 2

0
MyFormSet = modelformset_factory(ModelName, form=MyForm)
qs = ModelName.objects.filter(user=request.user)
formset = MyFormSet(queryset=qs)
于 2013-12-06T18:00:10.923 に答える