2012-07-24 42 views
0

這是我的模型:Django:我的代碼有什麼問題?

class war(models.Model): 
    title = models.CharField(max_length=20) 

class option(models.Model): 
    warval =models.ForeignKey(war) 
    value = models.CharField(max_length=10) 

class warform(ModelForm): 
    class Meta: 
     model = war 

class option_form(ModelForm): 
    class Meta: 
     model = option 
    exclude = ('warval') 

這是處理選項創建的視圖:

def warhandler(request,war_id): 
    f=modelformset_factory(option,form=option_form) 
    wobj=get_object_or_404(war,pk=war_id) 
    if request.method == 'POST': 
     formset = f(request.POST,queryset=option.objects.filter(warval=wobj)) 
     if formset.is_valid(): 
      formset.save() 
      return HttpResponse("Saved!check your model") 
     else: 
      return render_to_response("formset.html",RequestContext(request,{"set":formset})) 
    else: 
     formset = f(queryset=option.objects.filter(warval=wobj)) 
     print(formset) 
     return render_to_response("formset.html",RequestContext(request,{"set":formset,"war":wobj})) 

所以,當我提交表單這一觀點,我得到以下錯誤:

Exception Type: IntegrityError 
Exception Value: hit_option.warval_id may not be NULL 

我知道這個錯誤是什麼,它爲什麼會來,但我怎麼能刪除這個錯誤?

回答

1

製作warval與

class option(models.Model): 
    warval =models.ForeignKey(war, null=True) 
    value = models.CharField(max_length=10) 

或保存之前定義formset.warval,使默認值的非必填字段...

編輯:

閱讀herehere在窗體上使用字段的子集並保存。

+0

你能告訴我如何以及在哪裏定義「formset.warval」? – 2012-07-24 10:42:30

2

如您所知,這是因爲您沒有在任何地方設置外鍵值。您可能想要使用inlineformset_factory,這將負責將FK設置爲​​父對象war

+0

內聯formset是一個不錯的選擇。我剛纔試了一下,代碼運行良好。但是如果我在「option」模型中也有「User」外鍵呢? – 2012-07-24 10:43:56