亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

会宁县| 盐亭县| 宝应县| 洛南县| 黑水县| 永兴县| 获嘉县| 循化| 阳曲县| 麻江县| 长春市| 花莲县| 青州市| 梁河县| 榆中县| 济源市| 康定县| 蓬溪县| 治多县| 顺平县| 东乌珠穆沁旗| 吉林市| 茌平县| 祁东县| 四会市| 富顺县| 岳阳县| 含山县| 黎城县| 克拉玛依市| 佛学| 甘谷县| 福州市| 大化| 赫章县| 沂水县| 延庆县| 分宜县| 南和县| 沈丘县| 德昌县|