Django模型關聯

2021-08-19 13:11:53 字數 2711 閱讀 7385

1對1,1對多,多對多

1對1:

onetoonefield

主鍵和外來鍵是一對一的關係,在關聯表中,只能關聯乙個主表的id拓展表找主表。

建立模型:

class

student

(models.model):

stu_name = models.charfield(max_length=10)

stu_*** = models.booleanfield()

stu_birth = models.datefield()

stu_create_time = models.datetimefield(auto_now_add=true)

stu_operate_time = models.datetimefield(auto_now=true)

stu_yuwen = models.decimalfield(max_digits=3, decimal_places=1)

stu_shuxue = models.decimalfield(max_digits=3, decimal_places=1)

g_id = models.foreignkey(grade, null=true)

class

meta:

db_table = 'stu'

class

studentinfo

(models.model):

stu_addr = models.charfield(max_length=30)

stu_age = models.integerfield()

stu = models.onetoonefield(student)

class

meta:

db_table = 'stu_info'

在表中生成的關聯欄位名稱為stu_id

通過學生拓展表去獲取學生資訊

通過拓展表去獲取學生的資訊:

學生拓展表的單個物件(stuinfo).關聯字段(stu)

stuinfo = stuinfo.objects

.all().first()

student = stuinfo.stu

通過學生獲取關聯表中個人資訊

通過學生獲取關聯表的資料:

學生物件(stu).關聯的表名(stuinfo),即可獲取到關聯表的資料

stu = student.objects.all().first()

stuinfo = stu.stuinfo

1對多:

通過models.forergnkey()關聯外來鍵實現。

建立模型:

class

grade

(models.model):

g_name = models.charfield

(max_length=16)

class

student:

s_name = models.charfield

(max_length=10)

s_age = models.integerfield

(default=1)

s_grade = models.foreignkey

(grade, on_delete=protect)

通過學生去獲取班級資訊:

stu = student.objects.first()

stu.stu_grade

如下是通過班級獲取學生資訊(通過一獲取多的資料):

語法:一的物件.多的模型_set

低效能方法:

g = grade.objects

.all().first()

s = student.objects

.filter(s_grade=g)

高效能方法:

g = grate.objects

.all().first()

s = g.student_set.all()

多對多:

models.manytomanyfield()

建立模型:

class

user

(models.model):

# 建立使用者模型

u_name = models.charfield(max_length=32)

class

goods

(models.model):

# 建立商品模型

g_name = models.charfield(max_length=32)

g_user = models.manytomanyfield(user)

生成表時會有三張表,多出的一張表用來連線兩個模型,這長表通過兩個外來鍵建立兩個一對多來實現多對多。

多對多獲取資料

獲取第乙個使用者購買了那些商品

u = user.objects

.all().first()

allstu = u.goods_set.all()

獲取指定商品的購買使用者資訊

g = goods.objects

.filter(id=1)[0]

g.g_user.all()

Django模型關聯

關係字段型別 關係型資料庫的關係包括三種型別 一對多關係 參見booktest應用中的bookinfo類和heroinfo類。定義圖書模型類bookinfo class bookinfo models.model btitle models.charfield max length 20 圖書名稱 ...

django 模型 關聯關係

stu student.objects.create name computer.objects.create name 電腦 stu stu school school.objects.create name stu student.objects.create name school schoo...

Django1 6中models模型關聯的方法整理

foreignkey是個多對一 many to one 關係。引用下官方文件的例子 from django.db import models class topping models.model pass class pizza models.model toppings models.foreig...