Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当需要外部数据时,如何验证Django formfield?_Django_Forms_Validation - Fatal编程技术网

当需要外部数据时,如何验证Django formfield?

当需要外部数据时,如何验证Django formfield?,django,forms,validation,Django,Forms,Validation,我想创建一个自定义FormField以在我的应用程序中使用,并按照中的建议对其编写适当的验证。在我的例子中,这是一个短信收件人列表 但是,验证过程的一部分要求我验证指定的收件人列表是否确实是存储在当前用户通讯簿中的收件人。特别是,我需要拒绝任何不属于该用户的收件人 在执行验证时,如何访问存储在请求中的值(如当前用户)?或者,是否有任何方法可以在验证点传递此值?您认为应该执行此类验证,但如果您仍希望以表单形式执行,则我认为下面是您想要的: class SomeView(FormView):

我想创建一个自定义FormField以在我的应用程序中使用,并按照中的建议对其编写适当的验证。在我的例子中,这是一个短信收件人列表

但是,验证过程的一部分要求我验证指定的收件人列表是否确实是存储在当前用户通讯簿中的收件人。特别是,我需要拒绝任何不属于该用户的收件人


在执行验证时,如何访问存储在请求中的值(如当前用户)?或者,是否有任何方法可以在验证点传递此值?

您认为应该执行此类验证,但如果您仍希望以表单形式执行,则我认为下面是您想要的:

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。这正是我想要的解决方案!我需要在表单中进行验证,因为表单在多个页面上使用,并且表单没有映射到简单的模型。