Django框架学习笔记(26.ModelForm操作)
2017-12-22 20:49
609 查看
先回忆下以前的操作:
创建Django以及app01配置相关,
urls.py:
models.py:
views.py:
index.html:
下面是ModelForm操作:
urls.py:
models.py:
views.py:
user_list.html:
user_edit.html:
创建Django以及app01配置相关,
urls.py:
url(r'^index/', views.index)
models.py:
from django.db import models class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField() user_type = models.ForeignKey(to='UserType', to_field='id', on_delete=models.CASCADE)
views.py:
from django.shortcuts import render from django import forms from django.forms import fields from app01 import models class UserInfoForm(forms.Form): username = fields.CharField(max_length=32) email = fields.EmailField() user_type = fields.ChoiceField( choices=models.UserType.objects.values_list('id', 'caption') ) def __init__(self, *args, **kwargs): super(UserInfoForm, self).__init__(*args, **kwargs) self.fields['user_type'].choices = models.UserType.objects.values_list('id', 'caption') def index(request): if request.method == "GET": obj = UserInfoForm() return render(request, 'index.html', {'obj': obj}) elif request.method == "POST": obj = UserInfoForm(request.POST) obj.is_valid() models.UserInfo.objects.create(**obj.cleaned_data) models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data) return render(request, 'index.html', {'obj': obj})
index.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/index/" method="POST"> {% csrf_token %} {{ obj.as_p }} <input type="submit" value="提交"/> </form> </body> </html>
下面是ModelForm操作:
urls.py:
url(r'^index/', views.index), url(r'^user_list/', views.user_list), url(r'^edit-(\d+)/', views.user_edit),
models.py:
from django.db import models class UserType(models.Model): caption = models.CharField(max_length=32) class UserGroup(models.Model): name = models.CharField(max_length=32) class UserInfo(models.Model): username = models.CharField(max_length=32) email = models.EmailField() user_type = models.ForeignKey(to='UserType', to_field='id', on_delete=models.CASCADE) u2g = models.ManyToManyField(UserGroup) #强大之处在于:多对多也适用
views.py:
from django.shortcuts import render from django import forms from app01 import models from django.forms import widgets as Fwidgets from django.forms import fields as Ffields class UserInfoModelForm(forms.ModelForm): id_rmb = Ffields.CharField( widget=Fwidgets.CheckboxInput(), label="一个月内免登录" ) class Meta: model = models.UserInfo fields = '__all__' labels = { 'username': '用户名', 'email': '邮箱', } help_texts = { 'username': '...', } widgets = { #'username': Fwidgets.PasswordInput(attrs={'class': 'c1'}) } error_messages = { 'email': { 'required': '邮箱不能为空', 'invalid': '邮箱格式错误', } } field_classes = { #'email': Ffields.URLField } def clean_username(self): old = self.cleaned_data['username'] return old def index(request): if request.method == "GET": obj = UserInfoModelForm() return render(request, 'index.html', {'obj': obj}) elif request.method == "POST": obj = UserInfoModelForm(request.POST) if obj.is_valid(): obj.save() return render(request, 'index.html', {'obj': obj}) def user_list(request): li = models.UserInfo.objects.all().select_related('user_type') return render(request, 'user_list.html', {'li': li}) def user_edit(request, nid): if request.method == "GET": user_obj = models.UserInfo.objects.filter(id=nid).first() mf = UserInfoModelForm(instance=user_obj) return render(request, 'user_edit.html', {'mf': mf, 'nid': nid}) elif request.method == "POST": user_obj = models.UserInfo.objects.filter(id=nid).first() mf = UserInfoModelForm(request.POST, instance=user_obj) if mf.is_valid(): mf.save() else: pass return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})
user_list.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for row in li %} <li>{{ row.username }}-{{ row.user_type.caption }}-<a href="/edit-{{ row.id }}/">编辑</a></li> {% endfor %} </ul> </body> </html>
user_edit.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/edit-{{ nid }}/" method="POST"> {% csrf_token %} {{ mf.as_p }} <input type="submit" value="修改"/> </form> </body> </html>
相关文章推荐
- Django框架学习笔记(27.Ajax简单操作)
- Django框架学习笔记(14.一对多跨表操作)
- Django框架学习笔记(9.ORM基本操作)
- Django框架学习笔记(29.kindeditor插件使用)
- Django框架学习笔记(6.FBV和CBV简单介绍)
- Django 学习笔记(七)数据库基本操作(增查改删)
- Django框架学习笔记(30.组合搜索组件源码)
- Django框架学习笔记(4.简单的总结)
- Django框架学习笔记(25.Form组件验证)
- Python-Django框架学习笔记——第二课:Django的搭建
- Python Django 学习笔记(一)-------Django基本操作及后端get解析
- Django框架学习笔记(17.多对多简易实例)
- Python Web接口开发学习笔记(基于Django框架)(一)
- VS2013学习笔记之MFC框架CFile类文件操作
- Django框架学习笔记(28.文件上传详解)
- JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪
- jq框架封装学习笔记5-样式操作与属性操作模块
- python的web开发框架django学习笔记
- Android数据库LitePal框架学习笔记(1)---数据库的adb操作以及LitePal使用入门