平面设计教程网站有哪些,群辉搭wordpress,网页pc端,做新网站不换域名接着上一篇#xff1a;https://blog.csdn.net/javascript_good/article/details/132027702 来实现用户表的查询和添加
1、创建数据库表
在models.py 中#xff0c;增加UserInfo类#xff0c;包括字段姓名、密码、年龄、账号余额、入职时间、所属部门、性别 verbose_name 就…接着上一篇https://blog.csdn.net/javascript_good/article/details/132027702 来实现用户表的查询和添加
1、创建数据库表
在models.py 中增加UserInfo类包括字段姓名、密码、年龄、账号余额、入职时间、所属部门、性别 verbose_name 就相当是注释 所属部门因为专门有个部门表记录了部门信息在用户表中只存部门表的id在代码中写的字段名称是depart 但是在数据库中的字段名称会自动加上id ,变成depart_id. 对于性别也是存的数字定义一个变量元祖套元祖的用1表示男2表示女
from django.db import models# Create your models here.class Department(models.Model):部门表title models.CharField(verbose_name标题,max_length32)def __str__(self):return self.titleclass UserInfo(models.Model):用户表name models.CharField(verbose_name姓名,max_length16)pwd models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄)account models.DecimalField(verbose_name账户余额,max_digits10,decimal_places2,default0)create_time models.DateTimeField(verbose_name入职时间)#无约束# depart_id models.BigIntegerField(verbose_name部门id)#1、有约束# - to, 与那张表关联# - to_field ,与表中的那一列关联# 2、Django 自动 生成数据列会自动加上id ,depart_id# 方式一 级联删除depart models.ForeignKey(verbose_name部门, toDepartment,to_fieldid,on_deletemodels.CASCADE)# 方式二置空# depart models.ForeignKey(toDepartment, to_fieldsid, nullTrue, blankTrue, on_deletemodels.SET_NULL)#在django 中做的额约束gender_choices ((1, 男),(2,女),)gender models.SmallIntegerField(verbose_name性别, choicesgender_choices)
2、用户列表查询
urls.py 定义路由 path(‘user/list/’, views.user_list)
from django.urls import path
from app01 import viewsurlpatterns [#path(admin/, admin.site.urls),path(depart/list/, views.depart_list),path(depart/add/, views.depart_add),path(depart/delete/, views.depart_delete),#http://127.0.0.1:8000/depart/2/edit/path(depart/int:nid/edit/, views.depart_edit),path(user/list/, views.user_list),
]views.py 实现函数user_list 1、从数据库获取到所有的数据返回的是一个列表对象每一条数据就是一个对象可以通过循环获取对象通过点获取对象中的值将queryset传给页面user_list.html
def user_list(request):用户管理#获取所有用户列表[obj,obj,obj]queryset models.UserInfo.objects.all()for obj in queryset:print(obj.id,obj.name,obj.account,obj.create_time.strftime(%Y-%m-%d),obj.gender,obj.get_gender_display(),obj.depart.title)#obj.gender #获取到的是数字#obj.get_gender_display() # 获取到的是元祖里面对应的文字男或女 get_字段名称_display()#obj.depart_id #获取数据库中存储的那个字段值#obj.depart.title # 根据id自动去关联的表中获取哪一行数据depart对象 有外键的字段根据obj.字段名获取到部门表的对象obj.create_time.strftime(%Y-%m-%d) 在python中通过这样来转换时间return render(request,user_list.html,{queryset:queryset})user_list.html 内容 需要主要的是 模板文件中不允许有括号如果有括号的直接去掉django会自动加上 对于时间的转换django中也不一样通过obj.create_time|date:“Y-m-d” 这样转换的
{% extends layout.html %}{% block content %}div classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/user/add/添加用户/a/divdiv classpanel panel-defaultdiv classpanel-heading span classglyphicon glyphicon-list aria-hiddentrue/span 用户列表/divtable classtable table-borderedtheadtrthID/thth姓名/thth密码/thth年龄/thth账户余额/thth性别/thth所属部门/thth入职时间/thth操作/th/tr/theadtbody{% for obj in queryset %}trtd{{ obj.id }}/tdtd{{ obj.name }}/tdtd{{ obj.pwd }}/tdtd{{ obj.age }}/tdtd{{ obj.account }}/tdtd{{ obj.get_gender_display }}/td!--模板语法里面不能加括号去掉会自动加--td{{ obj.depart.title }}/tdtd{{ obj.create_time|date:Y-m-d}}/td !--模板语法里面通过这样来转换时间--tda classbtn btn-primary btn-xs href#编辑/aa classbtn btn-danger btn-xs href#删除/a/td/tr{% endfor %}/tbody/table/div/div{% endblock %}可以看到页面效果
3、添加用户
urls.py 添加路由user/add/
from django.urls import path
from app01 import viewsurlpatterns [#path(admin/, admin.site.urls),path(depart/list/, views.depart_list),path(depart/add/, views.depart_add),path(depart/delete/, views.depart_delete),#http://127.0.0.1:8000/depart/2/edit/path(depart/int:nid/edit/, views.depart_edit),path(user/list/, views.user_list),path(user/add/, views.user_add),
]
views.py 中实现函数user_add 用户添加的字段比较多这里使用ModelForm组件来实现就简化了代码需要先定义一个UserModelForm的类里面有个内部类Meta, 在这里将这个类根数据模型中的UserInfo关联起来通过fields来决定要传给页面的字段
from django.shortcuts import render,redirect,HttpResponse
from django import forms
from app01 import modelsclass UserModelForm(forms.ModelForm):#如果还要增加其它的校验需要重写字段name forms.CharField(min_length3,label用户名)class Meta:model models.UserInfofields [name,pwd,age,account,depart,gender,create_time]def __init__(self,*args,**kwargs):super().__init__(*args,**kwargs)#循环找到所有的插件添加了classform-control样式for name,field in self.fields.items():field.widget.attrs {class:form-control}def user_add(request):添加用户modelform版本if request.method GET:form UserModelForm()return render(request,user_add.html,{form:form})#post请求需要对字段进行判断form UserModelForm(datarequest.POST)if form.is_valid():# 如果数据合法保存到数据库#{‘name’:123,age:4,....}#通过save就会自动将数据插入到数据库form.save()return redirect(/user/list/)return render(request, user_add.html, {form: form})user_add.html 页面 field.label 获取到的是models.py中verbose_name值 field.errors.0 获取到的是错误信息的第一条默认只做是否为空的校验如果需要增加检验规则需要重写字段在views.py中
{% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-heading添加用户/divdiv classpanel-bodyform classform-horizontal methodpost novalidate{% csrf_token %}{% for field in form %}div classform-groupdiv classcol-sm-10label {{ field.label }}/label{{ field }}span stylecolor:red{{ field.errors.0}}/span/div/div{% endfor %}div classform-groupdiv classcol-sm-offset-2 col-sm-10button typesubmit classbtn btn-primary提交/button/div/div/form/div/div/div{% endblock %}效果