没有所有字段存在,模型表单无法验证?

时间:2013-03-02 16:11:03

标签: django django-forms

我有一个无法通过验证的模型表单,因为我不想在模板中显示某些字段,它们对用户不重要,但它们是模型的一部分,它们的值是动态生成。如何在表单中将这些字段设置为不需要(在POST后生成它们的值),以便表单可以通过验证,模型中是否需要它们?

1 个答案:

答案 0 :(得分:4)

使用模型实例使用数据填充表单。您将获得要保存到的模型实例 - form = Form() - (或者您可以获取它),而不是model_object = Model.objects.get(id=27),然后使用form = Form(instance=model_object)。这将使用模型数据填充字段。

如果您希望排除字段以便动态计算值,请尝试以下步骤:

class Form(forms.ModelForm):
    class Meta:
        model = Model
        exclude = ('field_name', 'field_name', 'field_name', ...) # the fields you want to exclude

然后:

def View(request):
    if request.POST:
        form = Form(request.POST)
        if form.is_valid():
            model_object = form.save(commit=False) # an unsaved model object
            model_object.field = some dynamic value
            model_object.another_field = some other dynamic value
            model_object.save() # save the model, ignore the form

有关详细信息,请查看:Setting user_id when saving in view - Django

更新:我在'field_name'的排除行Form周围添加了引号