博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django ORM 一对多表的创建
阅读量:6079 次
发布时间:2019-06-20

本文共 2018 字,大约阅读时间需要 6 分钟。

前面已经学习了在Django里面,如何对单表进行增删改查询。下面学习一下如果存在外键约束的情况下,如何创建。

例1

models.py

from django.db import modelsclass UserGroup(models.Model):    uid = models.AutoField(primary_key=True)    caption = models.CharField(max_length=32,unique=True)    ctime = models.DateTimeField(auto_now_add=True, null=True)    uptime = models.DateTimeField(auto_now=True, null=True)    class UserInfo(models.Model):    username = models.CharField(max_length=32,blank=True,verbose_name='用户名')    password = models.CharField(max_length=60, help_text='pwd')    email = models.CharField(max_length=60)    test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码'})    # user_group_id 数字    user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptimew)    user_type_choices = (        (1, '超级用户'),        (2, '普通用户'),        (3, '普普通用户'),    )    user_type_id = models.IntegerField(choices=user_type_choices,default=1)

创建外键约束的关键语句就是一条命令。

user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptime)

注意几点:

  1.  to_field 指向另外一个类的主键

  2. 默认情况下,他会创建级联删除的约束,也就是说如果我删除user_group里面的一行数据,userInfo表里和这个uid数据关联的行都会自动删除;我们可以通过 on_delete=models.SET_NULL来禁止删除

  3. 在UserInfo的表里,他会自动创建一个新的字段 user_group_id 作为外键的字段,而不是我们类里面定义的user_group。但是有趣的是,我们在程序里面可以直接在userInfo的对象里面引用 user_group对象。

    数据库里面创建的表,注意字段名称

下面看个调用的实例

例2. 可以看见我能够通过row.user_group.caption来直接获取用户组表的信息,相当于执行了一个left join的查询操作

views.py

def user_info(request):    if request.method == "GET":        user_list = models.UserInfo.objects.all()        group_list = models.UserGroup.objects.all()        return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})

user_info.html 

添加用户

    
    
    
        {% for item in group_list %}            
{
{ item.caption }}        {% endfor %}        

用户列表

        {% for row in user_list %}        
  •             
    { { row.username }} |            
     { { row.user_group.caption }}             
    删除 |            
    编辑        
  •     {% endfor %}

转载地址:http://yoqgx.baihongyu.com/

你可能感兴趣的文章
atitit.细节决定成败的适合情形与缺点
查看>>
iOS - Library 库
查看>>
MATLAB 读取DICOM格式文件
查看>>
spring事务管理(Transaction)
查看>>
django.contrib.auth登陆注销学习
查看>>
js执行本地exe文件的3种方法
查看>>
理解B树索引
查看>>
vi编辑器的命令集合
查看>>
Mysql利用binlog恢复数据
查看>>
解决 Windows启动时要求验证
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
Gallery循环滑动
查看>>
Sql与C#中日期格式转换总结
查看>>
iOS开发流程总结
查看>>
hadoop datanode 启动出错
查看>>
js颜色拾取器
查看>>
IDEA使用(1)intellIJ idea 配置 svn
查看>>
WPF 降低.net framework到4.0
查看>>