1. 程式人生 > >Django資料庫一對多資料關係

Django資料庫一對多資料關係

本文主要描述Django資料中一對一的資料關係,建立app等配置不再贅述。

Django操作資料庫,使用ORM

ORM:關係對映物件,把傳統的SQL語句封裝成了類和物件的形式,在操作表中的記錄時,就像在操作類和物件一樣。

使用預設資料庫:sqlite

操作在models.py檔案中完成。

一對多資料關係:

一對多關係是通過‘子表’中設定‘父表’的外來鍵約束來完成關聯

父表的一個數據對應子表中的多個數據

舉例:班級和學生

class Classes(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length
=10, null=True) # 班級名稱 num = models.IntegerField(null=True) # 班級人數 class Meta: db_table = 'Classes' def __unicode__(self): return 'classname:%s | classnum:%s' % (self.name, self.num) class Student(models.Model): id = models.AutoField(primary_key=True) # 關聯‘父表’,設定外來鍵 classes = models.ForeignKey(Classes, on_delete
=models.CASCADE) name = models.CharField(max_length=20, null=True) age = models.IntegerField(null=True) class Meta: db_table = 'Student' def __unicode__(self): return 'studentname:%s | studentage:%s' % (self.name, self.age)

建立完資料庫模型之後,我們要建立資料庫變更檔案以及應用表更檔案等操作,具體操作步驟,參考上篇文章《Django資料庫一對一資料關係》

對資料表中資料的查詢操作

1)從子表中查詢父表的資料

print  s1.classes.num 學生在所在班級的總人數

print s1.classes 學生所在班級的所有資訊

2)從父表中查詢子表的相關資料

1. 查詢一個班級的所有學生,通過student_set屬性查詢

print c1.student_set.all()

2.filter:根據條件,去結果集中進行匹配查詢

print c1.student_set.filter(name='lisi')

3. get :根據條件,去結果集中進行匹配查詢

print  c1.student_set.get(name='lisi')

get()和filter()方法的區別

get():只能查詢出一個結果,如果查詢的結果不止一個,name使用get()方法會報錯

filter():可以根據條件,匹配一組結果,得到一個結果集

XXX.set :Django提供的用於通過主模型(父表)物件訪問子模型(子表)物件集合的屬性名。