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

需求:用户注册,用户信息,用户组,用户组和用户信息为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值