0

これらは私のモデルです:

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

このエラーとは何か、なぜ発生するのかはわかっていますが、どうすればこのエラーを取り除くことができますか?

4

2 に答える 2

2

ご存知のように、これは外部キー値をどこにも設定していないためです。inlineformset_factoryFKを親warオブジェクトに設定するための処理を行うものを使用することをお勧めします。

于 2012-07-24T10:40:43.127 に答える
1

warvalを必須ではないフィールドにします

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

または、保存する前にformset.warvalを定義し、デフォルト値を作成します。

編集:

フォームのフィールドのサブセットを使用して保存する方法については、ここここをお読みください。

于 2012-07-24T10:41:20.730 に答える