How to have a nested inline formset within a form in Django?

前端 未结 1 1816
时光取名叫无心
时光取名叫无心 2020-12-24 00:47

I hope this question has not been asked yet, but I want to know if it is possible to have a normal class-based form for an object and to have an inline formset inside it to

相关标签:
1条回答
  • 2020-12-24 01:06

    Of course it's possible - how do you think the admin does it?

    Take a look at the inline formsets documentation.

    Edited after comment Of course, you need to instantiate and render both the parent form and the nested formset. Something like:

    def edit_contact(request, contact_pk=None):
        if contact_pk:
            my_contact = Contact.objects.get(pk=contact_pk)
        else:
            my_contact = Contact()
        CommunicationFormSet = inlineformset_factory(Contact, Communication)
        if request.POST:
            contact_form = ContactForm(request.POST, instance=my_contact)
            communication_set = CommunicationFormSet(request.POST,
                                                     instance=my_contact)
            if contact_form.is_valid() and communication_set.is_valid():
                contact_form.save()
                communication_set.save()
        else:
            contact_form = ContactForm(instance=my_contact)
            communication_set = CommunicationFormSet(instance=my_contact)
    
        return render_to_response('my_template.html', 
                                  {'form': contact_form, 'formset':communication_set})
    

    and the template can be as simple as:

    <form action="" method="POST">
      {{ form.as_p }}
      {{ formset }}
    </form>
    

    although you'll probably want to be a bit more detailed in how you render it.

    0 讨论(0)
提交回复
热议问题