2016-10-22 4 views
1

У меня есть две модели, связанные внешним ключом. Один из них - встроенный набор форм. По какой-то причине идентификаторы formset идентифицируются как первичные ключи в базе данных, и каждый раз, когда форма отправляется, таблица, принадлежащая набору форм, в основном перезаписывается. При сохранении, как я игнорировать formset идыисключая поле id в встроенных наборах форм при сохранении

models.py

class Student(models.Model): 
    first_name = models.CharField(max_length=40) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField() 

class Courses(models.Model): 
    student = models.ForeignKey(Student) 
    course_name = models.CharField(max_length=40) 
    start_time = models.TimeField() 

forms.py

class CoursesForm(forms.ModelForm): 

    class Meta: 
     model = Courses 
     exclude = ("student",) 


class StudentForm(forms.ModelForm): 

    class Meta: 
     model = Student 
     fields = "__all__" 

views.py ...

def post(self, request, *args, **kwargs): 
    sform = StudentForm(request.POST, instance=Student()) 

    CourseSchedule = inlineformset_factory(Student, Courses, form=CoursesForm, can_delete=False, extra=0, min_num=1) 

    cforms = CourseSchedule(data=request.POST) 

    if sform.is_valid() and cforms.is_valid(): 

     sform_obj = sform.save() 
     for cform in cforms.forms: 
      cform_obj = cform.save(commit=False) 
      cform_obj.student = sform_obj 
      cform_obj.save() 

    .... 
+0

где отношение в ваших моделях –

+0

сначала создайте отношения «m: m» между двумя таблицами в «Курсах» Model «students = models.ManyToManyField (Student)» –

+0

, затем используйте 'inline formset' соответствующим образом [inline ] (https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/#inline-formsets) –

ответ

1

я понял это. Мои данные набора данных сохранялись после отправки. Я должен был объявить пустой набор запросов в basemodelformset.