2011-04-27 70 views
4

当我渲染表单时,即使表单未提交,django也始终在每个字段上显示错误消息“此字段是必需的” 。可能是什么问题呢?Django窗体总是显示错误“此字段是必需的”

这里是我的模型形式

class MMEditidStateForm(forms.ModelForm): 
    class Meta: 
    model = models.MMEditidState 
    exclude = ('status_id',) 

这里是我的模型

class MMEditidState(models.Model): 
    state_id = models.IntegerField(primary_key = True) 
    state_dremelid = models.ForeignKey(MMDremelDump, db_column = 'state_dremelid') 
    assignee = models.CharField(max_length = 50) 
    state = models.CharField(max_length = 50) 
    role = models.CharField(max_length = 50) 
    date = models.DateTimeField() 
    class Meta: 
    db_table = u'mm_editid_state' 
    def __unicode__(self): 
    return u'%s %s' % (self.state_dremelid, self.assignee) 

这是我的看法

def qcthisedit(request, get_id): 
    dremel_id = MMEditidState.objects.filter(pk=get_id).values('state_dremelid') 
    if request.method == "POST": 
    form = forms.MMEditidStateForm(request.POST) 
    if form.is_valid(): 
     form.save() 
     return http.HttpResponseRedirect('/mmqc/dremel_list/') 
    else: 
    form = forms.MMEditidStateForm(request.POST) 
    return shortcuts.render_to_response('qcthisedit.html',locals(), 
            context_instance = context.RequestContext(request)) 

现在我只是渲染我的表单模板作为

<table> 
    <h3>Submit this form if there are no errors</h3> 

    <form action="." method="post"> 
    {{form.as_table}}  
    </table> 
    <input type="submit" value="Submit"> 
    <INPUT TYPE="BUTTON" VALUE="Go Back" ONCLICK="history.go(-1)"></form><br> 

请让我知道可能是什么问题?以前我没有收到这个错误信息

回答

10

因为你总是用request.POST实例化你的表单,即使你没有实际发布信息。在你的else条款中,删除request.POST

+1

只是为了澄清丹尼尔的答案:'form = forms.MMEditidStateForm()' – 2011-04-27 15:21:17

3

或使用

form = forms.MMEditidStateForm(request.POST or None) 

如果没有条件,如:

def qcthisedit(request, get_id): 
    dremel_id = MMEditidState.objects.filter(pk=get_id).values('state_dremelid') 
    form = forms.MMEditidStateForm(request.POST or None) 
    if form.is_valid(): 
    form.save() 
    return http.HttpResponseRedirect('/mmqc/dremel_list/') 

    return shortcuts.render_to_response('qcthisedit.html',locals(), 
            context_instance = context.RequestContext(request)) 
0

对于那些谁仍在寻找答案: 我有同样的问题。在这种情况下,我的建议是更新这一行:

form = forms.MMEditidStateForm(request.POST or None) 

希望它有帮助。

相关问题