Django ORM 一对多表的创建

简介:

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


例1

models.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from  django.db  import  models
class  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 )


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

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对象。

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

    wKiom1llnhGxcPkqAADPTjn_-fE669.jpg


下面看个调用的实例


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


views.py

1
2
3
4
5
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 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
< h3 >添加用户</ h3 >
< form  method = "POST"  action = "/cmdb/user_info/" >
     < input  type = "text"  name = "user"  />
     < input  type = "text"  name = "pwd"  />
 
     < select  name = "group_id" >
         {% for item in group_list %}
             < option  value = "{{ item.uid }}" >{{ item.caption }}</ option >
         {% endfor %}
     </ select >
 
     < input  type = "submit"  value = "添加" />
</ form >
 
< h3 >用户列表</ h3 >
< ul >
     {% for row in user_list %}
         < li >
             < a  href = "/cmdb/userdetail-{{ row.id }}/" >{{ row.username }}</ a > |
             < span > {{ row.user_group.caption }} </ span >
             < a  href = "/cmdb/userdel-{{ row.id }}/" >删除</ a > |
             < a  href = "/cmdb/useredit-{{ row.id }}/" >编辑</ a >
         </ li >
     {% endfor %}
</ ul >



wKioL1llnSHyiDV4AABFe1qKKUE506.jpg






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1946602,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
177 77
|
2月前
|
SQL 安全 数据库连接
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
50 17
|
3月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
4月前
|
SQL 监控 数据库
深入探索Django ORM:高效数据操作的秘诀与实践####
在当今的Web开发领域,提升数据访问层的效率是优化应用性能的关键。本文旨在通过剖析Django框架中的ORM(对象关系映射)机制,揭示其如何简化数据库交互,并探讨一系列高级技巧与策略,帮助开发者构建更高效、可维护的数据访问代码。我们不涉及安装步骤或基础概念,而是聚焦于实战经验分享,旨在为中高级开发者提供深度洞见。 ####
|
5月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
140 0
|
7月前
|
数据库 Python
Django ORM
【8月更文挑战第23天】
73 4
|
7月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
75 1
|
7月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
77 0
|
7月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
7月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作