2013-03-02 69 views
2

我有一个无法通过验证的模型表单,因为我不想显示模板中的某些字段,它们对用户不重要,但是属于模型的一部分,并且生成了它们的值如何设置这些字段在表单中不被要求(在POST之后生成它们的值),以便表单可以通过验证,并且它们应该在模型中需要?如果没有所有字段,模型表单不能验证?

回答

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

更新:我在排除行Form

附加 'field_name'的引号
+0

谢谢!而已! – Zed 2013-03-02 19:55:53

相关问题