from django import forms
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def depart_list(request):
""" 部门列表 """
# 去数据库中获取所有的部门列表
# queryset 理解为 [对象,对象,对象] 要循环才取的出来
queryset = models.Department.objects.all() # 获取所有部门列表的信息
# 把 queryset 当作参数传递给 render ,内部在模板渲染的时候就可以取到 queryset
return render(request, "depart_list.html", {'queryset': queryset})
def depart_add(request):
""" 添加部门 """
if request.method == "GET":
return render(request, "depart_add.html")
# 获取用户POST提交过来的数据 (title输入为空)
title = request.POST.get("title")
# 保存到数据库
models.Department.objects.create(title=title)
# 重定向回部门列表
return redirect("/depart/list/")
def depart_delete(request):
""" 删除部门 """
# 获取ID
nid = request.GET.get('nid')
# 删除
models.Department.objects.filter(id=nid).delete()
# 跳转回
return redirect("/depart/list/")
def depart_edit(request, nid):
""" 修改部门 """
if request.method == "GET":
# 根据nid,获取他的数据 [obj,]
row_object = models.Department.objects.filter(id=nid).first()
# print(row_object.id, row_object.title)
return render(request, "depart_edit.html", {"row_object": row_object})
# 获取用户提交的标题
title = request.POST.get("title")
print(title)
# 根据ID找到数据库中的数据,并进行更新
# models.Department.objects.filter(id=nid).update(title=title, 其他=123) 多个或者其他 其他上面获取,这里更新
models.Department.objects.filter(id=nid).update(title=title)
# 重定向回部门列表
return redirect("/depart/list/")
def user_list(request):
""" 用户管理 """
# 获取所有用户列表 [对象,对象,obj,obj]
queryset = models.UserInfo.objects.all()
# 用python的语法获取数据
"""
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_id,obj.depart.title)
# datetime.datetime 转字符串 .strftime("%Y-%m-%d-%H-%M") 用python的语法获取数据
# <td>{{ obj.create_time|date:"Y-m-d H:i:s" }}</td> 在HTML中对时间的处理,所有的都不加括号
# print(type(obj.create_time),type(obj.create_time.strftime("%Y-%m-%d")))
# obj.gender 对应的是数据库储存的1/2
# obj.get_gender_display() # 根据数值1/2 去找对应的文本内容,不用自己去找 get_字段名_display()
# xx = models.Department.objects.filter(id=obj.depart_id).first() # 手动写代码把id=obj.depart_id去找相关的表
# xx.title # 在相关的表中取 title
# obj.depart_id # 获取数据库中存储的那个字段
# obj.depart.title # 根据id自动去关联的表中获取哪一行数据 depart对象。
"""
return render(request, 'user_list.html', {"queryset": queryset})
def user_add(request):
""" 添加用户 """
context = {
'gender_choices': models.UserInfo.gender_choices,
'depart_list': models.Department.objects.all()
}
return render(request, "user_add.html", context)
# ################### ModelForm 示例###################
class UserModelForm(forms.ModelForm):
# name 字符串长度最小等于3
name = forms.CharField(min_length=3, label="用户名")
# 校验所有数据是否为空
class Meta:
model = models.UserInfo
fields = "__all__" # 自动显示所有
# fields = ["name", "password", "age", "account", "create_time", "gender", "depart"
# ] # 指定显示哪些
exclude = ['depart'] # 除了depart都显示,哪里有问题
# widgets = {
# "name": forms.TextInput(attrs={"class": "form-control"}),
# "password": forms.PasswordInput(attrs={"class": "form-control"}),
# "age": forms.TextInput(attrs={"class": "form-control"}),
# }
def __init__(self, *args, **kwargs): # 重新定义它的__init__方法
super().__init__(*args, **kwargs) # 执行它父类定义的方法
# 循环找到所有的插件,添加了class="form-control"
for name, field in self.fields.items():
# if name == "password": 不添加样式的可以在这里判断一下
# continue
# print(name, field) # name可以拿到所有定义的字段,名字。field 可以拿到它对象
field.widget.attrs = {"class": "form-control",
"placeholder": field.label} # widget 表示拿到的插件
def user_model_form_add(request):
""" 添加用户(ModelForm版本) """
if request.method == "GET":
form = UserModelForm()
return render(request, 'user_model_form_add.html', {"form": form})
# 用户POST提交的数据,数据校验。
form = UserModelForm(data=request.POST)
if form.is_valid():
# 如果数据合法,保存到数据库
# {'name': '123', 'password': '123', 'age': 11, 'account': Decimal('1'), 'create_time': datetime.datetime(2011, 11, 12, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='UTC')), 'gender': 2, 'depart': <Department: IT部门>}
# print(form.cleaned_data)
# models.UserInfo.objects.create(...) # 保存到数据库
form.save() # 自动将提交的数据保存到数据库的表里面 那个表(定义的这个表 model = models.UserInfo)
return redirect('/user/list/')
# 校验失败(在页面上显示错误信息)
# print(form.errors)
return render(request, 'user_model_form_add.html', {"form": form})
def user_edit(request, nid):
""" 编辑用户 """
row_object = models.UserInfo.objects.filter(id=nid).first()
if request.method == "GET":
# 根据ID去数据库获取要编辑的那一行数据(对象) instance=row_object modelform默认在页面显示每一个
form = UserModelForm(instance=row_object)
return render(request, 'user_edit.html', {'form': form})
# instance=row_object 不是添加,而是更新
form = UserModelForm(data=request.POST, instance=row_object)
if form.is_valid():
# 默认保存的是用户输入的所有数据,如果想要再用户输入以外增加一点值
# form.instance.字段名 = 值
form.save()
return redirect('/user/list/')
return render(request, 'user_edit.html', {"form": form})
def user_delete(request, nid):
models.UserInfo.objects.filter(id=nid).delete()
return redirect('/user/list/')