将参数传递给Django ModelForm清理方法

Ben*_*n S 3 django modelform

我试图将一个参数传递给我的ModelForm的clean方法,以便我可以对某些数据执行一些额外的验证.

在我的views.py文件中,我有:

page_data = page_form.cleaned_data(foo="bar")
Run Code Online (Sandbox Code Playgroud)

在我的clean_url方法中,我有:

def clean_url(self, **kwargs):
    url = self.cleaned_data['url']

    if kwargs['foo'] == url:
        query = FlatPage.objects.filter(url=url)
        if query.exists():
            raise forms.ValidationError(("This url is already being used by the '%s' page.") % (query[0].title))

    return url
Run Code Online (Sandbox Code Playgroud)

我一直得到一个KeyError foo.我不知道我在这里犯了什么错误,因为我之前已经通过了kwarg变量,但从来没有采用过干净的方法.

Ben*_*n S 9

关键在于通过ModelForm的init方法传递参数:

def __init__(self, *args, **kwargs):
    self.url = kwargs.pop('url', None)
    super(FlatPageForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后可以通过调用self.url在clean方法中引用此变量

def clean_url(self):
    url = self.cleaned_data['url']
    if self.url == url:
         #do something
    else:
         #do something else
Run Code Online (Sandbox Code Playgroud)