这篇文章主要讲解了“django中怎么使用ModleForm”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“django中怎么使用ModleForm”吧!
models.py
from django.db import models class Article(models.Model): title = models.CharField(max_length=50, verbose_name='标题') content = models.TextField(verbose_name='内容') create_date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title
forms.py
同目录下创建一个forms.py
from django.forms import ModelForm from django import forms from . models import Article from django.core.exceptions import ValidationError class ArticleForm(ModelForm): class Meta: model = Article exclude = ['id'] def clean(self): cleaned_data = super().clean() title = cleaned_data.get('title') if 'My' not in title: raise ValidationError('标题中必须包含My字样', code='title')
views.py
在views中,创建一个增加Article的方法
def add(request): if request.method == 'GET': return render(request, 'add.html') else: form = ArticleForm(request.POST) # 主要了解的是表单的验证 if form.is_valid(): form.save() return HttpResponseRedirect('/show/') else: form.errors.as_data() # {'__all__': [ValidationError(['标题中必须包含My字样'])]} form.errors.get_context() # {'errors': dict_items([('__all__', ['标题中必须包含My字样'])]), 'error_class': 'errorlist'} d = form.errors.get_json_data() # {'__all__': [{'message': '标题中必须包含My字样', 'code': 'title'}]} return HttpResponse(d.get('__all__'))
如果是在admin中使用ModelForm的验证,那也是非常方便的,如果我们要在用户的前端响应中使用表单验证,且又不通过django.forms渲染的表单来传递验证结果,则需要看看源码:ModelForm.errors
。errors
是ErrorDict()
的实例,ErrorDict
源码:
class ErrorDict(dict, RenderableErrorMixin): """ A collection of errors that knows how to display itself in various formats. The dictionary keys are the field names, and the values are the errors. """ template_name = "django/forms/errors/dict/default.html" template_name_text = "django/forms/errors/dict/text.txt" template_name_ul = "django/forms/errors/dict/ul.html" def __init__(self, *args, renderer=None, **kwargs): super().__init__(*args, **kwargs) self.renderer = renderer or get_default_renderer() def as_data(self): return {f: e.as_data() for f, e in self.items()} def get_json_data(self, escape_html=False): return {f: e.get_json_data(escape_html) for f, e in self.items()} def get_context(self): return { "errors": self.items(), "error_class": "errorlist", }
三个方法返回的都是字典,但数据结构不同,可以看情况而定。值得注意的是,在ArticleForm
中,raise ValidationError时,如果code传入参数时,它将会在get_context()
中显式体现出来。
感谢各位的阅读,以上就是“django中怎么使用ModleForm”的内容了,经过本文的学习后,相信大家对django中怎么使用ModleForm这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。