django中restframework巢狀序列化

2021-10-06 11:24:42 字數 2473 閱讀 4615

問題:

定義好了序列化器後有沒有遇到過想要序列化的資料表中有外來鍵的情況,我們需要的這個和外來鍵關聯的資料

model.py

# 報警表

class police(models.model):

# 報警型別

police = models.charfield(max_length=50)

# 開始範圍

begin = models.charfield(max_length=20,null=true)

# 結束範圍

end = models.charfield(max_length=20,null=true)

# 閾值

value = models.charfield(max_length=20)

# 貨物型別(w)

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

class meta:

db_table = 'police'

# 貨物型別

class cargo(models.model):

# 貨物名

name = models.charfield(max_length=50)

# 裝置型別

equ = models.charfield(max_length=50)

# 描述

brief = models.charfield(max_length=200)

# 建立時間

create_time = models.datefield(default = timezone.now)

# 更新時間

update_time = models.datetimefield(auto_now=true)

# 延遲時間

delay = models.integerfield()

# 記錄間隔

record = models.integerfield()

# 理想開始範圍

begin = models.charfield(max_length=20)

# 理想結束範圍

end = models.charfield(max_length=20)

class meta:

db_table = 'cargo'

定義巢狀序列化器:

class policeser(serializers.modelserializer):   # 有外來鍵的一方

class meta:

model = police

fields = '__all__'

# 貨物型別

class cargoser(serializers.modelserializer):

class meta:

model = cargo

fields = '__all__'

解決方法:

將policeser變為巢狀序列化

第一種

class policeser(serializers.modelserializer):   # 有外來鍵的一方

cargo = cargoser() # 將外來鍵字段序列化

class meta:

model = police

fields = '__all__'

第二種

class policeser(serializers.modelserializer):   # 有外來鍵的一方

class meta:

model = police

fields = '__all__'

depth = 1 # 會去找是外來鍵的字段然後序列化

# 1 代表的是序列化的深度,意思就是序列化的的資料表中加入還有關聯的外來鍵是否序列化

以上方法是建立在你的那個外來鍵字段是foreignkey的情況下

如果你的外來鍵是邏輯外來鍵(integerfield)

以上方法就會報錯

然後只能使用for來序列化

class cargoview(apiview):

def get(self,request):

# ser = policeser(police.objects.all(),many=true).data

cargo = cargo.objects.filter()

ser = cargoser(cargo,many=true).data

for i in ser:

police = police.objects.filter(cargo=i.get("id"))

p = policeser(police,many=true).data

i['police'] = p

return response(ser)

django基礎 django中的app應用

urlpatterns path lw2 views.lw2 先設定子路由和乙個實現登入功能頁面 login.html 使用者名稱 密碼 通過request.post.get 方法可以返回使用者登入時的資訊,根據資訊來判斷和進行下一事件。如果登入資訊與資料庫中資訊不相匹配,則重新返回新的登入頁面。此...

django 重新整理快取 Django 中的快取問題

django 中的快取問題 簡單介紹 在動態 中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.當乙個 的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.快取是將一些常用...

django預設快取是多大 Django中的快取

在動態 中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.當乙個 的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.快取是將一些常用的資料儲存記憶體或者memcache中...