Django——表单验证
我有一个可以访问Api并返回json数据的模型Django——表单验证,django,django-forms,Django,Django Forms,我有一个可以访问Api并返回json数据的模型 class Video(models.Model): url = models.URLField(_('URL'), blank=True) type = models.CharField(max_length=10, null=True, blank=True) def get_oembed_info(self, url): api_url = 'http://api.embed.ly/1/oembed?'
class Video(models.Model):
url = models.URLField(_('URL'), blank=True)
type = models.CharField(max_length=10, null=True, blank=True)
def get_oembed_info(self, url):
api_url = 'http://api.embed.ly/1/oembed?'
params = {'url': url, 'format': 'json'}
fetch_url = 'http://api.embed.ly/1/oembed?%s' % urllib.urlencode(params)
result = urllib.urlopen(fetch_url).read()
result = json.loads(result)
return result
def get_video_info(self):
url = self.url
result = self.get_oembed_info(url)
KEYS = ('type', 'title', 'description', 'author_name')
for key in KEYS:
if result.has_key(key):
setattr(self, key, result[key])
def save(self, *args, **kwargs):
if not self.pk:
self.get_video_info()
super(Video, self).save(*args, **kwargs)
class VideoForm(forms.ModelForm):
def clean(self):
if not self.cleaned_data['url'] and not self.cleaned_data['slide_url']:
raise forms.ValidationError('Please provide either a video url or a slide url')
return self.cleaned_data
我希望在提交表单时访问type字段,因此如果类型不是“something”,则会引发类似于上述clean方法中的错误。或者如何访问VideoForm类中的get_oembed_info方法结果
解决方案
正如Thomas所说,调用模型的clean方法,然后执行魔术
def clean(self):
self.get_video_info()
if self.type == 'something':
raise ValidationError("Message")
在验证过程中,
ModelForm
将被删除。该方法会引发验证错误,该错误将添加到表单的错误中
因此,您可以在模型的clean
方法中实现验证逻辑,其中使用self可以使用get\u oembed\u info
方法。get\u oembed\u info()
在验证过程中,将使用ModelForm
方法。该方法会引发验证错误,该错误将添加到表单的错误中
因此,您可以在模型的clean
方法中实现验证逻辑,其中get\u oembed\u info
方法可以使用self.get\u oembed\u info()
非常感谢Thomas的帮助。通过调用模型的clean方法,它现在运行得非常好。@AhmadAjmi很高兴我能提供帮助!非常感谢托马斯的帮助。通过调用模型的clean方法,它现在运行得非常好。@AhmadAjmi很高兴我能提供帮助!