中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django REST Framework序列化外鍵如何獲取外鍵的值方法

發布時間:2021-05-22 10:58:41 來源:億速云 閱讀:428 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Django REST Framework序列化外鍵如何獲取外鍵的值方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

需求:序列化外鍵,獲取外鍵的除id之外的值

使用Django REST Framework雖然開發接口快速,但是如果想要獲取到除外鍵id值之外的外鍵信息,直接繼承serializers.ModelSerializer類,然后在fields中指定返回的字段是獲取不到外鍵的其他值的,比如我現在需要外鍵的name屬性值,下面就給大家介紹兩種方法通過序列化外鍵來獲取我們想要的外鍵的值。

這里有兩個Model:問卷(Questionnaire);問題(Question)。一張問卷中包含多個問題,問題通過外鍵關聯對應的問卷。

model.py

class Questionnaire(models.Model):
 '''問卷'''
 title = models.CharField('標題',max_length=100)
 class Meta:
  verbose_name_plural = '所有問卷'
 
class Question(models.Model):
 '''問題'''
 #所屬問卷
 questionnaire = models.ForeignKey(Questionnaire,verbose_name='所屬問卷',related_name='questions')
 #問題標題
 title = models.CharField('問題',max_length=150)
 #是否是多選
 is_checkbox = models.BooleanField('是否多選',default=False,help_text='是否是多選問題')
 class Meta:
  verbose_name_plural = '問題'

serializers.py

from rest_framework import serializers
from question.models import Question,Questionnaire
 
class QuestionnaireSerializer(serializers.ModelSerializer):
 class Meta:
  model = Questionnaire
  fields = ('title',)
 
class QuestionSerializer(serializers.ModelSerializer):
 class Meta:
  model = Question
  fields = ('title','is_checkbox')

這是沒有對外鍵進行序列化的代碼,我們只能獲得model中已有字段的值,那么現在我想通過QuestionSerializer這個序列化的類來得到其外鍵questionnaire的值(questionnaire_title),有一下兩種方法實現

1.在序列化的時候創建一個新的字段(questionnaire_title)并且在這個字段中指定source=這個屬性,具體操作如下

serializers.py

from rest_framework import serializers
from question.models import Question,Questionnaire,Choice
 
class QuestionnaireSerializer(serializers.ModelSerializer):
 class Meta:
  model = Questionnaire
  fields = ('title',)
 
class QuestionSerializer(serializers.ModelSerializer):
 questionnaire_title = serializers.CharField(source='questionnaire.title')
 questionnaire_id = serializers.IntegerField()
 class Meta:
  model = Question
  fields = ('title','is_checkbox','questionnaire_title','questionnaire_id')

第二個字段questionnaire_id之所以沒有添加source=這個屬性,是因為這個字段名跟model中的字段名一樣,django會自動識別,如果把這個字段換為questionnaire_ID那么就需要設置source=這個屬性。

2.直接在model中通過property裝飾器創建一個名為questionnaire_title的函數,并在函數中返回我們想要拿到的信息如:questionnaire_name,questionnaire_id,然后在序列化時指定為ReadOnlyField()字段;具體操作如下

models.py

class Questionnaire(models.Model):
 '''問卷'''
 title = models.CharField('標題',max_length=100)
 class Meta:
  verbose_name_plural = '所有問卷'
 
class Question(models.Model):
 '''問題'''
 #所屬問卷
 questionnaire = models.ForeignKey(Questionnaire,verbose_name='所屬問卷',related_name='questions')
 #問題標題
 title = models.CharField('問題',max_length=150)
 #是否是多選
 is_checkbox = models.BooleanField('是否多選',default=False,help_text='是否是多選問題')
 class Meta:
  verbose_name_plural = '問題'
 
 @property
 def questionnaire_title(self):
  return self.questionnaire.title,self.questionnaire.id
serializers.py使用ReadOnly

from rest_framework import serializers
from question.models import Question,Questionnaire
 
class QuestionnaireSerializer(serializers.ModelSerializer):
 class Meta:
  model = Questionnaire
  fields = ('title',)
 
class QuestionSerializer(serializers.ModelSerializer):
 questionnaire_title = serializers.ReadOnlyField()
 questionnaire_id = serializers.ReadOnlyField()
 class Meta:
  model = Question
  fields = ('title','is_checkbox','questionnaire_title','questionnaire_id')

這就是通過序列化外鍵來獲得外鍵信息的兩種方法,總的來說兩種方法都特別簡單實用,只不過第二種方法要多寫幾行代碼而已。

感謝各位的閱讀!關于“Django REST Framework序列化外鍵如何獲取外鍵的值方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岢岚县| 嘉荫县| 普定县| 建湖县| 南岸区| 永济市| 桐庐县| 喀喇沁旗| 青铜峡市| 淮南市| 上犹县| 巴马| 乐业县| 宜都市| 吉林省| 鄂托克前旗| 建昌县| 腾冲县| 炎陵县| 佛教| 大渡口区| 视频| 乌海市| 鄢陵县| 奉化市| 松原市| 西丰县| 阿尔山市| 延边| 晴隆县| 自贡市| 友谊县| 阿荣旗| 贵德县| 黔江区| 政和县| 贵定县| 西宁市| 桑日县| 丹东市| 张家川|