django multiple forms with formsets

后端 未结 1 728
礼貌的吻别
礼貌的吻别 2020-12-18 17:04

I have a model:

class HospitalDoctor(models.Model):
    hospital = models.ForeignKey(Hospital)
    full_name = models.CharField(max_length=100, unique=True)
         


        
相关标签:
1条回答
  • 2020-12-18 17:18

    https://docs.djangoproject.com/en/dev/ref/forms/models/#django.forms.models.inlineformset_factory

    from django.core.urlresolvers import reverse
    from django.forms.models import inlineformset_factory
    
    TimingFormSet = inlineformset_factory(HospitalDoctor, Timing, form=TimingForm, extra=7)
    
    class HospitalDoctorAddView(CreateView):
       ...
    
        def get_context_data(self, **kwargs):
            context = super(HospitalDoctorAddView, self).get_context_data(**kwargs)
            context['formset'] = TimingFormSet(instance=Timing())
    
            return context
    
        def post(self, request, *args, **kwargs):
            form = self.form_class(request.POST)
            formset = TimingFormSet(request.POST, request.FILES)  # request.FILES for files, remove if don't send files
    
            if form.is_valid() and formset.is_valid():
                return self.form_valid(form, formset)
            else:
                return self.form_invalid(form, formset)
    
        def form_valid(self, form, formset):
            self.object = form.save()
            formset.instance = self.object
            formset.save()
    
            return HttpResponseRedirect(self.get_success_url())
    
        def form_invalid(self, form, formset):
            return self.render_to_response(
                self.get_context_data(
                    form=form,
                    formset=formset
                )
            )
    
        def get_success_url(self):
            return reverse('some_app:url_name')
    
    0 讨论(0)
提交回复
热议问题