Django ORM 一對多表的創建
阿新 • • 發佈:2017-07-12
django 外鍵 一對多
前面已經學習了在Django裏面,如何對單表進行增刪改查詢。下面學習一下如果存在外鍵約束的情況下,如何創建。
例1
models.py
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)
創建外鍵約束的關鍵語句就是一條命令。
user_group = models.ForeignKey("UserGroup",to_field=‘uid‘) # (uid,catption,ctime,uptime)
註意幾點:
to_field 指向另外一個類的主鍵
默認情況下,他會創建級聯刪除的約束,也就是說如果我刪除user_group裏面的一行數據,userInfo表裏和這個uid數據關聯的行都會自動刪除;我們可以通過 on_delete=models.SET_NULL來禁止刪除
在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
<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>
本文出自 “麻婆豆腐” 博客,請務必保留此出處http://beanxyz.blog.51cto.com/5570417/1946602
Django ORM 一對多表的創建