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提供的用於通過主模型(父表)對象訪問子模型(子表)對象集合的屬性名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM