2013-04-26 2 views
0

У меня есть что-то подобное в models.pyMultiple ModelForm в Django

class A(models.Model): 
    name = CharField(max_length=150) 
class B(models.Model): 
    a= ForeignKey(A) 
    name = CharField(max_length=150) 

и я создал ModelForm как для в views.py

def create(request): 
    a_form = AForm() 
    b_form = BForm() 
    if request.method == 'POST': 
      a_form = AForm(request.POST, prefix="a") 
      b_form = BForm(request.POST, prefix="b") 
    if a_form.is_valid() and b_form.is_valid(): 
      a = a_form.save() 
      b_form.cleaned_data["a"] = a 
      b= b_form.save() 
      return HttpResponseRedirect('/companies/detail/{b.id}') 
    return render_to_response('companies/signup.html',{'AForm':a_form , 'BForm': b_form }, context_instance=RequestContext(request)) 

и я получил эту ошибку

Exception Value: mysite_b.a_id may not be NULL 

Может ли кто-нибудь сказать мне, что я пропущу?

ответ

0

Я думаю, вы должны использовать префикс, даже в режиме GET:

def create(request): 
>> a_form = AForm(prefix="a") 
>> b_form = BForm(prefix="b") 
    if request.method == 'POST': 
      a_form = AForm(request.POST, prefix="a") 
      b_form = BForm(request.POST, prefix="b") 
    if a_form.is_valid() and b_form.is_valid(): 
      a = a_form.save() 
>>  b = b_form.save(commit=False) 
>>  b.a = a 
>>  b.save() 
      return HttpResponseRedirect('/companies/detail/{b.id}') 
    return render_to_response('companies/signup.html',{'AForm':a_form , 'BForm': b_form }, context_instance=RequestContext(request)) 
+0

Благодаря она работает сейчас :) –