一對多關係
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...