本文主要是介绍Django-ModelForm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:武沛齐
出处:Django之ModelForm组件
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
ModelForma. class Meta:model, # 对应Model的fields=None, # 字段exclude=None, # 排除字段labels=None, # 提示信息help_texts=None, # 帮助提示信息widgets=None, # 自定义插件error_messages=None, # 自定义错误信息(整体错误信息from django.core.exceptions import NON_FIELD_ERRORS)field_classes=None # 自定义字段类 (也可以自定义字段)localized_fields=('birth_date',) # 本地化,如:根据不同时区显示数据
如:数据库中2016-12-27 04:10:57setting中的配置TIME_ZONE = 'Asia/Shanghai'USE_TZ = True则显示:2016-12-27 12:10:57b. 验证执行过程is_valid -> full_clean -> 钩子 -> 整体错误c. 字典字段验证def clean_字段名(self):# 可以抛出异常# from django.core.exceptions import ValidationErrorreturn "新值"d. 用于验证model_form_obj = XXOOModelForm()model_form_obj.is_valid()model_form_obj.errors.as_json()model_form_obj.clean()model_form_obj.cleaned_datae. 用于创建model_form_obj = XXOOModelForm(request.POST)#### 页面显示,并提交 ###### 默认保存多对多obj = form.save(commit=True)# 不做任何操作,内部定义 save_m2m(用于保存多对多)obj = form.save(commit=False)obj.save() # 保存单表信息obj.save_m2m() # 保存关联多对多信息
f. 用于更新和初始化obj = model.tb.objects.get(id=1)model_form_obj = XXOOModelForm(request.POST,instance=obj)...PS: 单纯初始化model_form_obj = XXOOModelForm(initial={...})
一个实例:
1. models.py


1 from django.db import models
2
3 # Create your models here.
4
5
6 class UserInfo(models.Model):
7 name = models.CharField(max_length=32)
8 email = models.EmailField()
9 nickName = models.CharField(max_length=32)
10 group = models.ForeignKey('UserGroup', null=True, blank=True)
11 role = models.ManyToManyField('Role', null=True, blank=True)
12
13 def __str__(self):
14 return self.name
15
16
17 class UserGroup(models.Model):
18 name = models.CharField(max_length=32)
19 info = models.TextField()
20
21 def __str__(self):
22 return self.name
23
24
25 class Role(models.Model):
26 name = models.CharField(max_length=32)
27 info = models.TextField()
28
29 def __str__(self):
30 return self.name
2. views.py


1 from django.shortcuts import render,HttpResponse
2 from django.forms import ModelForm
3 from django.forms import fields as dfields
4 from django.forms import widgets as dwidgets
5 from app01 import models
6
7
8 class TestModelForm(ModelForm):
9 class Meta:
10 model = models.UserInfo
11 fields = '__all__'
12 error_messages = {
13 'name': {
14 'required': '用户名不能为空',
15 },
16 'email': {
17 'required': '邮箱不能为空',
18 'invalid': '邮箱格式不正确',
19 },
20 'nickName': {
21 'required': '昵称不能为空',
22 }
23 }
24 labels = {
25 'name': '用户名',
26 'email': '邮箱',
27 'nickName': '昵称',
28 'group': '部门',
29 'role': '角色',
30 }
31 widgets = {
32 'name': dwidgets.Input(attrs={'class': 'form-control'}),
33 'email': dwidgets.Input(attrs={'class': 'form-control'}),
34 'nickName': dwidgets.Input(attrs={'class': 'form-control'}),
35 'group': dwidgets.Select(attrs={'class': 'form-control'}),
36 'role': dwidgets.SelectMultiple(attrs={'class': 'form-control'}),
37 }
38
39 # Create your views here.
40
41
42 def test(request):
43 content = {'form': None}
44 if request.method == 'GET':
45 form = TestModelForm()
46 content['form'] = form
47 return render(request, 'test.html', content)
48 else:
49 form = TestModelForm(request.POST)
50 content['form'] = form
51 if form.is_valid():
52 print(form.cleaned_data)
53 form.save()
54 return HttpResponse('add success!')
55 else:
56 return render(request, 'test.html', content)
57
58
59 def edit(request, nid):
60 obj = models.UserInfo.objects.filter(id=nid).first()
61 content = {'form': None}
62 if request.method == 'GET':
63 form = TestModelForm(instance=obj)
64 content['form'] = form
65 return render(request, 'edit.html', content)
66 else:
67 form = TestModelForm(instance=obj, data=request.POST, files=request.FILES)
68 if form.is_valid():
69 form.save()
70 return HttpResponse('edit success!')
71 content['form'] = form
72 return render(request, 'test.html', content)
3. templates


1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
6 <title>Title</title>
7 </head>
8 <body>
9 <form method="post" novalidate>
10 {% csrf_token %}
11 <div class="form-group" style="width: 300px; margin: 50px auto;">
12 {{ form.as_p }}
13 <input type="submit" value="提交">
14 </div>
15 </form>
16
17 <script src="/static/jquery-3.2.1.js"></script>
18 </body>
19 </html>


1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
6 <title>Title</title>
7 </head>
8 <body>
9 <form method="post" novalidate>
10 {% csrf_token %}
11 <div class="form-group" style="width: 300px; margin: 50px auto;">
12 {{ form.as_p }}
13 <input type="submit" value="提交">
14 </div>
15 </form>
16
17 <script src="/static/jquery-3.2.1.js"></script>
18 </body>
19 </html>
这篇关于Django-ModelForm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!