詹戈:这是什么我的代码有问题吗?

2024-09-22 14:40:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这些是我的模型:

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

我知道这个错误是什么,为什么会发生,但我如何才能消除这个错误?你知道吗


Tags: formidmodelreturnmodelsrequest错误class
2条回答

使warval成为非必填字段

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

或定义表单集.warval保存之前,请设置一个默认值。。。你知道吗

编辑:

阅读herehere,了解如何在窗体上使用字段子集并保存。你知道吗

如您所知,这是因为您没有在任何地方设置外键值。您可能想使用^{},它将负责为您设置父对象war的FK。你知道吗

相关问题 更多 >