我有一个表单,其中验证取决于登录的用户。对于某些用户,某些值是有效的,对于其他用户,它们是无效的。有效和无效是动态的 - 我无法为每个用户组创建新表单。
更重要的是,我需要在更多表单中进行相同的验证,所以我创建了自定义表单字段。对于这个自定义表单字段,我需要以某种方式传递用户实例来检查该值是否有效。
这个怎么做?
我有一个表单,其中验证取决于登录的用户。对于某些用户,某些值是有效的,对于其他用户,它们是无效的。有效和无效是动态的 - 我无法为每个用户组创建新表单。
更重要的是,我需要在更多表单中进行相同的验证,所以我创建了自定义表单字段。对于这个自定义表单字段,我需要以某种方式传递用户实例来检查该值是否有效。
这个怎么做?
我正在这样做:
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
# doing stuff with the user…
super(EventForm, self).__init__(*args, **kwargs)
在您的视图类/方法中,您必须像这样实例化表单:
form = EventForm(user=request.user, data=request.POST)
您不需要额外的字段。
您可以通过显式传递当前用户或从表单方法中的请求中获取它来访问当前用户。init()
然后,您可以在清理表单时使用检索到的值。
如果您需要在多个表单中使用此功能,我将创建一个专门的表单继承自的基类,或者创建一个添加所需功能的 mixin。