2013-06-24 3 views
0

Как заполнить немодельное поле в форме модели со значением из базы данных до проверки?Django - Как заполнить поле модели формы из базы данных, когда поле не в модели?

if request.POST: 
     formset = StudentScheduleFormSet(request.POST,) 
     for form in formset: 
      if not form.initial.get('course_term'): 
       form.initial['course_term'] = CourseTerm.objects.get(course=form.data['course'], term=form.data['term']) 
      if form.is_valid(): 
       form.save() 
     if formset.is_valid(): 
      formset.save() 

Я попытался это и около двадцати других вариантов, включая модификацию __init__ в форме, и я получаю близко, но не вполне могу сделать это.

ответ

1

Вам нужен data вместо initial

Вы можете попробовать это:

if request.POST: 
     formset = StudentScheduleFormSet(request.POST,) 
     for form in formset: 
      if not form.data['course_term']: 
       form_obj.course_term = CourseTerm.objects.get(course=form.cleaned_data['course'], term=form.cleaned_data['term']) 
      if form.is_valid(): 
       form.save() 
     if formset.is_valid(): 
      formset.save() 

ИЛИ

if request.POST: 
     formset = StudentScheduleFormSet(request.POST,) 
     for form in formset: 
      if form.is_valid(): 
       if not form.cleaned_data.get('course_term'): 
        form_obj = form.save(commit=False) 
        form_obj.course_term = CourseTerm.objects.get(course=form.cleaned_data['course'], term=form.cleaned_data['term']) 
        form_obj.save() 
       else: 
        form.save() 
     if formset.is_valid(): 
      formset.save() 
+0

Это здорово. Это часть набора форм, хотя (я не упоминал об этом), и теперь он не может найти ключ, так как «форма - # -» добавляется. – Jack

+0

Вы попробовали? Поскольку вы делаете форму в наборе форм, это не должно быть так. – karthikr

+0

Я попробовал, и я удивлен, что это тоже произошло. – Jack