当前位置: 首页 > news >正文

Django 注册信息相关 与外键跨表查询

为什么80%的码农都做不了架构师?>>>   hot3.png

需求:用户注册,用户信息,用户组,用户组和用户信息为1对多

models.py模块信息

UserGroup 用户组

IDname
1超级管理员
2普通用户

反向取值:

 obj = UserGroup.objects.filter(id = 1).first()

obj.UserInfo_set           # 反向查找所有 id =1 的用户

class UserGroup(models.Model):              #用户组表
    name=models.CharField(max_length=30)

UserInfo 用户信息

ID    username    passwordcreat_datetype_id
1lee1234562016-12-201

models : 定义的字段 为 type ,但是Django 会在生成的表中,把 type字段 后面添加 _id 

当前表中 :注意当前表查询的时候,外键只有1个下划线

 取值的时候 filter( xx.type = UserGroup 对象) 返回  1个  UserGroup  对象
                  filter(xxx.type_id =1) 返回  正常数字1

class UserInfo(models.Model):                 #用户信息
    username=models.CharField(max_length=30)
    creat_date=models.DateTimeField(auto_now_add=True) #时间设置自增
    password=models.CharField(max_length=30)
    type=models.ForeignKey('UserGroup')         #外键

模版获取UserInfo 表信息

data=UserInfo.objects.all()

for item in data

    item.username=》 'lee'

   item.password=》'123456'

   item.type.name=》'超级管理员'    # 实例对象(data).用户组(type).用户组详细信息(name)

跨表查询信息(外键) 两下划线

如查询 UserGroup 表中所有 id=1(超级管理员)的信息

data=UserInfo.objects.filter(type__id=1)

注意:这里的type 为1个 UserGroup 对象

外键跨表正向取值 用点               data.type.name

外键跨表正向查询 (filter)用两下划线    filter( type__id) 

同理 values ,value_list ,也用两下划线 __ 查询
       
data=UserInfo.objects.filter(type__id=1).values(type__id ,type__name)
       data=UserInfo.objects.filter(type__id=1).value_list(type__id ,type__name)

values,value_list  点击查询models 增删改查

template 模版模块 register

<form action='' method='POST'>
	<p>用户名:<input name='username'></input></p>
	<p>密	码:<input name='password'></input></p>
	<p>
	<select name='group'>
		<option value="0">--请选择---</option>
		{% for item in ugs%}
		<option value="{{item.id}}">{{item.type}}</option>
		{% endfor %}
	</select>
	</p>
	
	<input type='submit' value='注册'>
	<div style="color:red ">{{error.status}}</div>
</form>

注意:获取select 选项卡时 ,获取的值为 group:0 假如当前选择的为第0个选项卡

详细解释如下图所示:

views.py 模块

逻辑控制:

  • 用户名密码是否为空
  • 是否选择用户组
  • 条件满足时,返回生成的视图函数
from django.shortcuts import render,redirect
from system.models import UserInfo, UserGroup
def register(request):  #用户注册
    ret={'status':''}                        #错误状态
    ugs = UserGroup.objects.all()            #每次打开register.html ,获取用户组信息
    if request.method=='GET':                #当HTTP请求为GET
        return render(request,'register.html',{"ugs":ugs})   #register.html 生成用户信息
    if request.method=='POST':               #当HTTP请求为POST
        username=request.POST.get('username')      #获取输入框中的username,password 和type(外键表)
        password=request.POST.get('password')
        ugid = request.POST.get('group', "0")      #获取当前的用户组类型 type 如上图所示
        is_empty=all([username,password])          #判断用户名密码是否为空
        if is_empty:                                 #如果不为空
            if ugid == "0":                           #判断用户组是否为默认值,即没选择用户组
                ret['status']='请选择用户组'            #显示错误状态 
                return render(request,'register.html',{"ugs":ugs,"error":ret})
            ug = UserGroup.objects.get(id=ugid)      #用户名密码不为空时,获取当前用户组(id)
            user = UserInfo()                        #生成用户信息
            user.username = username           
            user.password = password
            user.typeid = ug                         #生成当前用户
            user.save()
            return redirect("/system/index")        #跳转到 首页
        else:
            ret['status']='用户名密码不能为空'         #如果为空,
            return render(request,'register.html',{"ugs":ugs,"error":ret})

 

转载于:https://my.oschina.net/esdn/blog/808709

相关文章:

  • MathType输入框怎么调整
  • 彻底理解推送
  • CentOS7.2编译安装LNMP
  • 如何写3DMAX的插件
  • Centos7上安装tomcat
  • 论车牌识别与电子警察关系
  • hbase通过row key 的前缀查询记录
  • 《轻量级Java Web整合开发入门SSH》 - 快速理解Java框架的又一积木
  • PHP课程总结20161222
  • 画虚线
  • SFB 项目经验-09-用Lync 2013或Skype for Business 2015抢火车票
  • SEO优化---学会建立高转化率的网站关键词库
  • ★平衡法则在生活中的应用
  • (十五)使用Nexus创建Maven私服
  • 利用cmdline和gradle快速编译出apk
  • bearychat的java client
  • echarts的各种常用效果展示
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • export和import的用法总结
  • go语言学习初探(一)
  • JavaScript设计模式系列一:工厂模式
  • Netty 4.1 源代码学习:线程模型
  • python大佬养成计划----difflib模块
  • SpringBoot几种定时任务的实现方式
  • Spring核心 Bean的高级装配
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue.js-Day01
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 经典排序算法及其 Java 实现
  • 如何实现 font-size 的响应式
  • 一个完整Java Web项目背后的密码
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • gunicorn工作原理
  • !!Dom4j 学习笔记
  • #考研#计算机文化知识1(局域网及网络互联)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (转)Mysql的优化设置
  • (轉貼) UML中文FAQ (OO) (UML)
  • .net 按比例显示图片的缩略图
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • ??在JSP中,java和JavaScript如何交互?
  • @ConditionalOnProperty注解使用说明
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [bbk5179]第66集 第7章 - 数据库的维护 03