我试图将一个参数传递给我的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变量,但从来没有采用过干净的方法.
关键在于通过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)
| 归档时间: |
|
| 查看次数: |
3027 次 |
| 最近记录: |