Django ORM 一對多表的建立

2021-09-03 09:53:15 字數 2002 閱讀 5107

前面已經學習了在django裡面,如何對單錶進行增刪改查詢。下面學習一下如果存在外來鍵約束的情況下,如何建立。

例1models.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=)

# 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的查詢操作

Django ORM 一對多操作

models.py form django.db import models class book models.model 表名book,django會自動使用專案名 我們定義的表名 如沒有自定義主鍵,django會自動新增乙個主鍵,欄位名id 自增 name models.charfield m...

Struts Hibernate一對多表的建立

create table login id int auto increment primary key,username varchar 20 not null,password varchar 20 not null create table student sid int auto incre...

Django ORM 一對多 和 多對多

在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...