Django:表单GET具有“必填字段”错误,而POST则没有

|| 在Django中使用表格进行编码。我遇到一个问题,如果表单是GET,则每个字段总是显示错误“此字段是必填项。”,但是如果表单是POST,则不存在此问题。这是一个简单的示例(部分代码), views.py:
def login(request):        
    if request.method == \'GET\':
        form = RegisterForm (request.GET)
    else:
        form = RegisterForm ()
return render_to_response(\'register.html\', locals(), context_instance=RequestContext(request))
register.html:
<form action = \"\" method = \"GET\">
    <table style = \"border: none;\">
        <tr>
            <td class = \"login\"><strong>email:</strong></td>
            <td class = \"login\">{{ form.email }}</td>
            <td><span class = \"error\">{{ form.errors.email }}</span></td>
        </tr>

        ...
    </table>
</form>
如果将所有\'GET \'更改为\'POST \',一切都很好。否则,\'form.errors.email \'将始终抛出一个“此字段为必填项。”错误。 另一件事是奇怪的……似乎我看不到任何以request.GET初始化的表单对象。 Django Book 2.0仅显示以request.POST初始化的表单对象。这里有我想念的东西吗? 非常感谢您提供任何提示。 编辑:感谢克雷格和伊格纳西奥的提示。但是,我的问题是,无论我使用GET还是POST对此表单进行什么操作,在表单中使用GET都会给我关于“字段必填”的表单错误。那是我不了解的机制。谢谢任何帮助。     
已邀请:
如果我没记错的话,除非指定为POST,否则默认的HTTP请求方法始终为GET。因此,当您访问该视图(默认情况下使用GET)时,您已经满足了
if request.method == \'GET\':
语句,因此它会自动弹出验证错误,以将空数据插入字段。您实际上从未到达
else: form = RegisterForm()
线 查看django-debug-toolbar,这是一个非常有用的工具栏,它使您可以查看请求类型和requet变量。     
首先,如果您使用的是登录名,则在登录用户时应始终使用post。 其次,您要在一个地方而不是在另一个地方初始化一个空表格。您可能想要的是:
    def login(request):        
        if request.method == \'POST\':
             form = RegisterForm (request.POST)
             # Some logic to validate the user
        else:
             form = RegisterForm ()
             return render_to_response(\'register.html\', locals(), context_instance=RequestContext(request))
如果要发布到同一页面,则不需要您的操作值。另外,如果您正在使用POST(应该使用),那么您应该在表单中使用{%csrf_token%}。     
省略“ 5”属性。默认情况下,提交到相同的URL(当然,除非使用GET)。     

要回复问题请先登录注册