当需要外部数据时,如何验证Django formfield?
我想创建一个自定义FormField以在我的应用程序中使用,并按照中的建议对其编写适当的验证。在我的例子中,这是一个短信收件人列表 但是,验证过程的一部分要求我验证指定的收件人列表是否确实是存储在当前用户通讯簿中的收件人。特别是,我需要拒绝任何不属于该用户的收件人当需要外部数据时,如何验证Django formfield?,django,forms,validation,Django,Forms,Validation,我想创建一个自定义FormField以在我的应用程序中使用,并按照中的建议对其编写适当的验证。在我的例子中,这是一个短信收件人列表 但是,验证过程的一部分要求我验证指定的收件人列表是否确实是存储在当前用户通讯簿中的收件人。特别是,我需要拒绝任何不属于该用户的收件人 在执行验证时,如何访问存储在请求中的值(如当前用户)?或者,是否有任何方法可以在验证点传递此值?您认为应该执行此类验证,但如果您仍希望以表单形式执行,则我认为下面是您想要的: class SomeView(FormView):
在执行验证时,如何访问存储在请求中的值(如当前用户)?或者,是否有任何方法可以在验证点传递此值?您认为应该执行此类验证,但如果您仍希望以表单形式执行,则我认为下面是您想要的:
class SomeView(FormView):
form_class = SomeForm
def get_form_kwargs(self):
kwargs = super(SomeView, self).get_form_kwargs()
kwargs.update({
'extra_param': self.some_param
})
return kwargs
class SomeForm(forms.ModelForm):
class Meta:
model = Human
fields = ['name']
def __init__(self, *args, **kwargs):
self.extra_param = kwargs.pop('excluded_pk') # you should pop it from kwargs before parent init call
super(SomeForm, self).__init__(*args, **kwargs)
def clean_name(self):
name = self.cleaned_data['name']
if name != self.extra_param: # since extra_param is object variable you can use it here
raise forms.ValidationError('tadaam!')
return name
谢谢@madzhon。这正是我想要的解决方案!我需要在表单中进行验证,因为表单在多个页面上使用,并且表单没有映射到简单的模型。