一對多 多對一

2021-10-25 18:02:29 字數 2729 閱讀 9013

pip install djangorestframework==

3.9.2

pip install markdown==

3.0.1 # markdown support for the browsable api.

pip install django-filter==

2.1.0 # filtering support

from rest_framework import serializers

from users.models import userinfo

class userinfoserializer

(serializers.serializer)

: name = serializers.

charfield

(min_length=

3,max_length=

20) # 顯示普通字段

ut = serializers.

charfield

(source=

'ut.type_name'

,required=false) # 顯示一對多欄位名稱

gp = serializers.

serializermethodfield

(read_only=true) # 自定義顯示(顯示多對多)

*** = serializers.

charfield

(source=

'name'

,required=false) # 也可以自定義顯示欄位名稱

ut_id = serializers.

integerfield

(write_only=true) # 一對多關聯字段定義(外來鍵約束)

'''primarykeyrelatedfield和stringrelatedfield:可以用對 一對多 和 多對多 關聯物件序列化'

''# gp = serializers.primarykeyrelatedfield(read_only=true, many=true)

# gp = serializers.stringrelatedfield(read_only=true,many=true)

class meta:

model = userinfo

# 自定義顯示 多對多 字段

def get_gp

(self,row):''

'row: 傳過來的正是 userinfo表的物件'

'' gp_obj_list = row.gp.

all().

values

('id'

,'group'

) # 獲取使用者所有組

return gp_obj_list

''

' 一對多序列化(反向查詢)'

''class usertypeserializer

(serializers.serializer)

: type_name = serializers.

charfield()

# 法1一對多關聯物件序列化:此字段將被序列化為關聯物件的主鍵

userinfo_set = serializers.

primarykeyrelatedfield

(read_only=true, many=true)

# 法2一對多關聯物件序列化:此字段將被序列化為關聯物件的字串表示方式(即__str__方法的返回值)

# userinfo_set = serializers.stringrelatedfield(read_only=true,many=true)

# 法3一對多關聯物件序列化:使用關聯物件的序列化器

# userinfo_set = userinfoserializer(many=true)

class userinfoviewset

(apiview)

: def get

(self, request,

*args,

**kwargs)

: # 一對多、多對多查詢都是一樣的語法

obj = users_model.userinfo.objects.

all(

) ser = serializers.

userinfoserializer

(instance=obj,many=true) # 關聯資料多條

# ser = serializers.userinfoserializer(instance=obj[0]) # 關聯資料一條

return

response

(ser.data, status=

200)

1、外來鍵說明

表a中有字段(如身份證號)做了主鍵,表b中也有這個字段(身份證號),這裡的身份證號一定來自

表a同樣欄位裡的內容,但再b表中身份證號對應id可以重複

2.那麼表b的這個欄位就叫表a欄位的外來鍵,也就是兩個表以身份證號這個字段建立了聯絡。

為了一張表記錄的資料不要太過冗餘。

保持資料的一致性、完整性。

hibernate 一對多(多對一)

舉個例子 乙個國家有多個省份,多個省份只有乙個國家,這個就是多對一和一對多,兩者就是看物件的角度問題 多對一關聯對映 在多的一端加入外來鍵指向一的一端,他維護的關係是多指向一 一對多關聯對映 在多的一端加入外來鍵指向一的一端,它維護的關係是一指向多 也就是說一對多和多對一的對映策略是一樣的,只是站的...

hibernate註解一對多 多對一

註解 多對一刪除時 只執行多的一方而一不會改變 新增時考慮 一的一方主鍵是否存在 cascade表示級聯操作 cascadetype.merge級聯更新 cascadetype.persist級聯重新整理 cascadetype.refresh級聯儲存 cascadetype.remove級聯刪除 ...

maybatis一對多 多對一查詢

1.mybatis 一對多的三種實現方式 查詢1的一方把多的一方查出來 方式1 1的一方 warning mbg.generated 一對多 conllection標籤 property 一的類中持有多的集合的引用 oftype 多的一方集合的型別 select 在多的一方的xml中寫查詢語句 把要...