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,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
存储 关系型数据库 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移1
Django创建应用、ORM的进阶使用及模型类数据库迁移1
74 0
|
6月前
|
SQL 关系型数据库 MySQL
Django入门ORM(Django操作MySQL) 专题一
Django入门ORM(Django操作MySQL) 专题一
|
7月前
|
存储 数据可视化 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移3
Django创建应用、ORM的进阶使用及模型类数据库迁移3
52 0
|
7月前
|
关系型数据库 MySQL 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移2
Django创建应用、ORM的进阶使用及模型类数据库迁移2
46 0
|
4月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
1月前
|
SQL API 数据库
一篇文章带你了解Django ORM操作
一篇文章带你了解Django ORM操作
18 0
|
5月前
|
SQL 关系型数据库 MySQL
07 Django模型 - ORM简介及MySQL数据库的使用
07 Django模型 - ORM简介及MySQL数据库的使用
35 0
|
4月前
|
Python
django orm 批量更新不同内容
网上存在很多相似文章,都是使用drf-extension,但是这个包其实只是批量更新的一种方法,就是全部更新一个内容,这完全不符合自己的需求。
24 1
|
7月前
|
SQL 存储 API
Django ORM详解:最全面的数据库处理指南
Django ORM详解:最全面的数据库处理指南
37 0
|
8月前
|
SQL 数据库 Python