Django學習 21 表關係引數

2022-08-04 07:45:12 字數 4475 閱讀 6214

一對多關係

foreignkey(foreignobject) #

foreignobject(relatedfield)

to, #

要進行關聯的表名

to_field=none, #

要關聯的表中的欄位名稱

on_delete=none, #

當刪除關聯表中的資料時,當前表與其關聯的行的行為

-models.cascade,刪除關聯資料,與之關聯也刪除

-models.do_nothing,刪除關聯資料,引發錯誤integrityerror

-models.protect,刪除關聯資料,引發錯誤protectederror

-models.set_null,刪除關聯資料,與之關聯的值設定為null(前提fk欄位需要設定為可空)

-models.set_default,刪除關聯資料,與之關聯的值設定為預設值(前提fk欄位需要設定預設值)

-models.set,↓↓↓↓↓↓↓↓↓↓

a. 與之關聯的值設定為指定值,設定:models.set(值)

b. 與之關聯的值設定為可執行物件的返回值,設定:models.set(可執行物件)

deffunc():

return 10

class

mymodel(models.model):

user =models.foreignkey(

to="

user",

to_field="id"

on_delete=models.set(func),

)related_name=none, #

反向操作時,使用的欄位名,用於代替 【表名_set】 如: obj.表名_set.all()

related_query_name=none, #

反向操作時,使用的連線字首,用於替換【表名】 如: models.usergroup.objects.filter(表名__欄位名=1).values('表名__欄位名')

limit_choices_to=none, #

在admin或modelform中顯示關聯資料時,提供的條件:

- limit_choices_to=

- limit_choices_to=lambda :

from django.db.models import

q - limit_choices_to=q(nid__gt=10)

- limit_choices_to=q(nid=8) | q(nid__gt=10)

- limit_choices_to=lambda : q(q(nid=8) | q(nid__gt=10)) & q(caption='

root')

db_constraint=true #

是否在資料庫中建立外來鍵約束

parent_link=false #

在admin中是否顯示關聯資料

一對一關係

onetoonefield(foreignkey)

to,

#要進行關聯的表名

to_field=none #

要關聯的表中的欄位名稱

on_delete=none, #

當刪除關聯表中的資料時,當前表與其關聯的行的行為

###### 對於一對一 ######

#1. 一對一其實就是 一對多 + 唯一索引

#2.當兩個類之間有繼承關係時,缺省會建立乙個一對一字段

#如下會在a表中額外增加乙個c_ptr_id列且唯一:

class

c(models.model):

nid = models.autofield(primary_key=true)

part = models.charfield(max_length=12)

class

a(c):

id = models.autofield(primary_key=true)

code = models.charfield(max_length=1)

多對多關係

manytomanyfield(relatedfield)

to,

#要進行關聯的表名

related_name=none, #

反向操作時,使用的欄位名,用於代替 【表名_set】 如: obj.表名_set.all()

related_query_name=none, #

反向操作時,使用的連線字首,用於替換【表名】 如: models.usergroup.objects.filter(表名__欄位名=1).values('表名__欄位名')

limit_choices_to=none, #

在admin或modelform中顯示關聯資料時,提供的條件:

- limit_choices_to=

- limit_choices_to=lambda :

from django.db.models import

q - limit_choices_to=q(nid__gt=10)

- limit_choices_to=q(nid=8) | q(nid__gt=10)

- limit_choices_to=lambda : q(q(nid=8) | q(nid__gt=10)) & q(caption='

root')

symmetrical=none, #

僅用於多對多自關聯時,symmetrical用於指定內部是否建立反向操作的字段

#做如下操作時,不同的symmetrical會有不同的可選字段

models.bb.objects.filter(...)

#可選字段有:code, id, m1

class

bb(models.model):

code = models.charfield(max_length=12)

m1 = models.manytomanyfield('

self

',symmetrical=true)

#可選字段有: bb, code, id, m1

class

bb(models.model):

code = models.charfield(max_length=12)

m1 = models.manytomanyfield('

self

',symmetrical=false)

through=none, #

自定義第三張表時,使用字段用於指定關係表

through_fields=none, #

自定義第三張表時,使用字段用於指定關係表中那些欄位做多對多關係表

from django.db import

models

class

person(models.model):

name = models.charfield(max_length=50)

class

group(models.model):

name = models.charfield(max_length=128)

members =models.manytomanyfield(

person,

through='

membership',

through_fields=('

group

', '

person'),

)class

membership(models.model):

group = models.foreignkey(group, on_delete=models.cascade)

person = models.foreignkey(person, on_delete=models.cascade)

inviter =models.foreignkey(

person,

on_delete=models.cascade,

related_name="

membership_invites",

)invite_reason = models.charfield(max_length=64)

db_constraint=true, #

是否在資料庫中建立外來鍵約束

db_table=none, #

預設建立第三張表時,資料庫中表的名稱

Django2 1 mysql學習(後續)

url.py檔案的配置from django.urls import path from import views urlpatterns path login views.login,name login path logout views.logout,name logout path empl...

四 Django學習之關係表介紹及使用

xx models.onetoonefield to 表名 to field 欄位名 on delete models.cascade on delete 刪除時的一些級聯效果,to field可以不寫,預設是關聯到另一張表的主鍵,on delete在1.x版本的django中不用寫,預設是級聯刪除...

django 表關係之 多對多

比如一篇文章和標籤的關係。一篇文章可以有多個標籤,乙個標籤可以被多篇文章所引用。因此標籤和文章的關係就是典型的多對多的關係。下邊只是一篇文章對應多個標籤 乙個標籤對應多篇文章就不舉例了,自己腦補下!這樣我們會通過articles欄位來獲取某個標籤tags下邊的所有文章 articles models...