I want to make in my Service a small program that will keep records of meetings with the authorities. I don’t understand how to work with formsets. I read the documentation both in Russian and in English, but it’s impossible to save and read the entire “train with cars” formset .

The form of the document is as follows: Minutes of the meeting No. nr_document from date_unfold

Present: employees

MeetingItem - item number, description (tasks), due date, responsible

MeetingItem - item number, description (tasks), due date, responsible

etc...

How to connect two models of the form MeetingHeader and MeetingItem ? How to use formset_factory in view.py ? How then to read the generated document?

Please show or explain.

Then I will independently master the dynamic addition / removal of fields as in the example - http://whoisnicoleharris.com/2015/01/06/implementing-django-formsets.html

model.py from django.db import models class Employee(models.Model): name = models.CharField(max_length=50) surname = models.CharField(max_length=50) email = models.EmailField(max_length=70, blank=True, null= True, unique= True) def __str__(self): return '%s %s' % (self.name, self.surname) class Meta: ordering = ['name'] class Meeting(models.Model): nr_document = models.CharField(max_length=10) date_unfold = models.DateField( blank=True, null=True) employees = models.ManyToManyField('Employee') def __str__(self): return 'Proces verbal nr.%s din %s' % (self.nr_document, self.date_unfold) class Meta: ordering = ['-date_unfold'] class MeetingItem(models.Model): nr_punct = models.CharField(max_length=10) text = models.TextField() date_unfold = models.DateField( blank=True, null=True) employees = models.ManyToManyField('Employee') 

forms.py

 from django import forms from .models import Employee, Meeting, MeetingItem class EmployeeForm(forms.ModelForm): class Meta: model = Employee fields = '__all__' class MeetingForm(forms.ModelForm): class Meta: model = Meeting fields = '__all__' class MeetingItemForm(forms.ModelForm): class Meta: model = MeetingItem fields = '__all__' 

view.py

 from django.template import RequestContext from django.forms.formsets import formset_factory from django.shortcuts import render_to_response from django.shortcuts import render, redirect, get_object_or_404 from .models import Employee, Meeting from .forms import EmployeeForm, MeetingForm, MeetingItemForm def meeting_item(request): MeetingFormSet = formset_factory(MeetingForm) MeetingItemFormSet = formset_factory(MeetingItemForm, extra=2) if request.method == "POST": meeting_formset = MeetingFormSet(request.POST, prefix='meetings') meetingItem_formset = MeetingItemFormSet(request.POST, prefix='meetingItems') if meeting_formset.is_valid() and meetingItem_formset.is_valid(): message = "Perfect pass" **?????.save()** # здесь не знаю как сохранить else: message = "NU A MERS PERFECT" meeting_formset = MeetingFormSet(prefix='meetings') meetingItem_formset = MeetingItemFormSet(prefix='meetingItems') return render_to_response('blog/meeting_item.html', { 'message': message, 'meeting_formset': meeting_formset, 'meetingItem_formset': meetingItem_formset }, context_instance=RequestContext(request)) else: return render_to_response('blog/meeting_item.html', {'meetingItem_formset': MeetingItemFormSet(), 'meeting_formset': MeetingFormSet() }, context_instance=RequestContext(request)) 

    2 answers 2

    Try this:

     for form in meeting_formset: form.save() for form in meetingItem_formset: form.save() 

      Throws validation error

      Validation error

      In line

       if meeting_formset.is_valid() and meetingItem_formset.is_valid(): 

      Please note that in both formsets manytomany . How to specify m2m saving for formsets?

      How can I tie a protocol header with paragraphs, so that the whole 'train' is kept all together, so that it can be read and printed.

      Unfortunately, with the dynamic addition and removal of fields, it is also dull, just like a wall.