Django中Model支持强大的数据库操作,弱小的数据验证、Form有强大数据验证、ModelForm把2者结合起来,有强大的数据验证,适中的数据库操作。本文主要介绍ModelForm使用。
from django.db import models from django.core.validators import RegexValidator class User(models.Model): name = models.CharField(max_length=10) email = models.EmailField(max_length=10) user_type = models.ForeignKey(‘UserType‘,on_delete=models.CASCADE) # 一对多 class UserType(models.Model): name = models.CharField(max_length=10) def __str__(self): return self.name
from django.conf.urls import url,include from django.contrib import admin from app01 import views from app01.view import mf urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^index/‘, views.index), url(r‘^fm/‘, views.fmindex), url(r‘^mf/‘, mf.index), url(r‘^edit-mf-(\d+)/‘, mf.edit_index), ] from django.conf import settings if settings.DEBUG: import debug_toolbar urlpatterns += [ url(r‘^__debug__/‘, include(debug_toolbar.urls)), ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/mf/" method="POST"> {{ obj.as_p }} <input type="submit" value="提交" /> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/edit-mf-{{nid}}/" method="POST"> {{ obj.as_p }} <input type="submit" value="提交" /> </form> </body> </html>
from django.shortcuts import render from django import forms from app01 import models class UserModelForm(forms.ModelForm): class Meta: model = models.User fields = "__all__" labels = {‘name‘:‘用户名‘,‘email‘:‘邮箱‘,‘user_type‘:‘用户类型‘} def index(request): if request.method == "GET": obj = UserModelForm() return render(request,‘mf.html‘,{‘obj‘: obj}) elif request.method == "POST": obj = UserModelForm(request.POST) if obj.is_valid(): # print(obj.cleaned_data) # models.User.objects.create(**obj.cleaned_data) obj.save(commit=True) #可以直接获取用户输入信息保存信息到数据库,包括一对多及多对多 """ mobj = obj.save(commit=False) mobj.save() obj.save_m2m() """ print(obj.errors) return render(request, ‘mf.html‘, {‘obj‘: obj}) def edit_index(request,nid): if request.method == "GET": model_obj = models.User.objects.get(id=nid) obj =UserModelForm(instance=model_obj) return render(request, ‘mf1.html‘, {‘obj‘: obj,‘nid‘: nid}) elif request.method == ‘POST‘: model_obj = models.User.objects.get(id=nid) obj = UserModelForm(request.POST, instance=model_obj) #有instance代表是更新数据 if obj.is_valid(): obj.save() return render(request, ‘mf1.html‘, {‘obj‘: obj})
ModelForm常用配置
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‘,) # 本地化,如:根据不同时区显示数据
使用示例
rom django.forms import ModelForm from django.forms import widgets from rbac import models class Userform(ModelForm): class Meta: model = models.User fields = "__all__" help_texts={‘name‘:"请输入用户名"} labels = {‘name‘:‘用户名‘,‘email‘:‘邮箱‘,‘user_type‘:‘用户类型‘} error_messages = { ‘username‘:{‘required‘:‘名称不能为空‘,‘invalid‘:‘格式错误‘}, ‘password‘:{‘required‘:‘名称不能为空‘,‘invalid‘:‘格式错误‘} } widgets = { ‘username‘:widgets.TextInput(attrs={‘class‘:‘form-control‘,‘placeholder‘:‘username‘}), ‘password‘:widgets.TextInput(attrs={‘class‘:‘form-control‘,‘placeholder‘:‘password‘}) }
原文:https://www.cnblogs.com/quanloveshui/p/12061648.html