我有一个Django表单来捕获用户名/密码和登录按钮。显然,我需要用户名/密码是强制性的。
我还希望在同一表单上有一个注册按钮,其中用户名/密码字段不是必需的。
如何以依赖于已按下的按钮的方式验证表单。
通常,对表单clean
方法进行验证,但clean
方法无法访问所选按钮 - 只输入输入的字段。
答案 0 :(得分:0)
我已经发现了答案 - 在官方文件中没有很好地记录 - 所以这里是:
在表单上的clean
方法内以及可以访问已清理数据的情况下,程序还可以访问self.data
这是未清除的数据 - 即隐藏字段和可用按钮(清理过的数据只有输入字段可用,但没有input type="submit"
按钮 - 所以我的html表单有(大约):
<form method="post" action="" >
<table>
<tr>
<th><label for="id_username">Username:</label></th>
<input type="text" name="username" id="id_username" maxlength="30" /></td></tr>
<tr>
<th><label for="id_password">Password:</label></th><input type="password" name="password" id="id_password" /></td></tr>
<tr>
<td><input type='submit' name='register' value='Register'/></td>
<td><input type='submit' name='submit' value='Sign In'/></td>
</tr>
</table>
</form>
以我的Django形式 - 干净的方法是:
def clean(self):
cleaned_data = super().clean()
register = self.data.get('register')
signin = self.data.get('submit')
if signin:
if not (cleaned_data.get('username') and cleaned_data.get('password')):
self.add_error('username', 'Must provide your scouts.org.uk Username to sign in')
self.add_error('password', 'Must provide your scouts.org.uk password to sign in')
return cleaned_data
elif register:
return cleaned_data
请注意使用self.data访问按钮的表单数据