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})