restframework 序列化和反序列化外來鍵

2022-06-18 08:09:13 字數 2976 閱讀 5815

首先我們在models下新建兩個模型類

class user(softdeletemode):

gender_choices = (

('1', '普通會員'),

('2', 'vip會員')

)name = models.charfield(max_length=100, verbose_name='暱稱')

phone = models.charfield(max_length=11, verbose_name='手機號', unique=true)

password = models.charfield(max_length=255, verbose_name='密碼')

level = models.charfield(max_length=20, choices=gender_choices, verbose_name='使用者身份')

class meta:

db_table = 'user'

verbose_name = '使用者表'

ordering = ['-id'] # 根據id倒序排列

# 呼叫時返回自身的屬性,不然都是顯示xx object

def __str__(self):

return self.name

class bookinfo(softdeletemode):

title = models.charfield(max_length=20, verbose_name='名稱')

read = models.integerfield(default=0, verbose_name='閱讀量')

author = models.foreignkey(user, on_delete=models.cascade, error_messages=) # 外來鍵

class meta:

db_table = 'tb_books' # 指明資料庫表名

verbose_name = '圖書' # 在admin站點中顯示的名字

def __str__(self):

"""定義每個資料物件的顯示資訊"""

return self.title

每個模型定義乙個serializers.modelserializer

class userserializer(serializers.modelserializer):

class meta:

model = user

fields = ['id', 'name', 'phone', 'level']

class bookserializer(serializers.modelserializer):

class meta:

model = bookinfo

fields = ['id', 'title', 'read', 'comment','author']

通過postman請求我們的介面可以看到,author作為外來鍵序列化後,返回的是user裡的id。(忽略欄位_create_time和_update_time)

如果我們想要返回具體外來鍵裡的值,應該怎麼看呢。

class bookserializer(serializers.modelserializer):

class meta:

model = bookinfo

# 取出所有的字段

# 在bookserializer中我們定義乙個方法,獲取外來鍵對應的資料

def get_author(self, obj):

authors_query_set = obj.author # 拿到所有作者資訊 (obj是user物件)

可以在serializers.modelserializer中定義與author欄位相同的屬性,並例項化serializers.primarykeyrelatedfield物件

class bookserializer(serializers.modelserializer):

# 必須要傳的引數,queryset查詢集,這裡我們的主表是user表,所以定義了user的查詢集

# error_messages: 錯誤提示資訊,如果物件未找到對應的key:does_not_exist

author = serializers.primarykeyrelatedfield(queryset=user.objects.all(), error_messages=)

class meta:

model = bookinfo

fields = ['id', 'title', 'read', 'comment']

def get_author(self, obj):

authors_query_set = obj.author # 拿到所有作者資訊

return

實現效果:

rest framework序列化器的使用demo

from rest framework import serializers 匯入對應的序列化器的類 from models import bookread only true是定製json序列化的key,write only true是定製反序列的key,提交post已經put請求時需要注意key...

rest framework之序列化詳解 06

拿到所有的角色資料 1.urls.py 2.models.py 假設只有3個角色 3.views.py from api import models import json json只能序列化python的基本資料型別 querydict是django定義的類 所以以下這種操作會報錯 4.解決方案 ...

學習週報 rest framework

本週學習情況 1.rest framework的學習 2.前後端分離5 2到5 6 下週學習計畫 停止課程內容學習 2.花10學習rest framework基礎的學習 本週完成情況 一 fbv,cbv 繼承 避免重複 1 優先順序從左往右 2 super 1.先在studentsview裡面查詢,...