最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年07月26日 11:21:20   作者:在杭州  
今天小編就為大家分享一篇Django REST Framework序列化外鍵獲取外鍵的值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

這里有兩個(gè)Model:問卷(Questionnaire);問題(Question)。一張問卷中包含多個(gè)問題,問題通過外鍵關(guān)聯(lián)對應(yīng)的問卷。

model.py

class Questionnaire(models.Model):
 '''問卷'''
 title = models.CharField('標(biāo)題',max_length=100)
 class Meta:
  verbose_name_plural = '所有問卷'
 
class Question(models.Model):
 '''問題'''
 #所屬問卷
 questionnaire = models.ForeignKey(Questionnaire,verbose_name='所屬問卷',related_name='questions')
 #問題標(biāo)題
 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')

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

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

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')

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

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

models.py

class Questionnaire(models.Model):
 '''問卷'''
 title = models.CharField('標(biāo)題',max_length=100)
 class Meta:
  verbose_name_plural = '所有問卷'
 
class Question(models.Model):
 '''問題'''
 #所屬問卷
 questionnaire = models.ForeignKey(Questionnaire,verbose_name='所屬問卷',related_name='questions')
 #問題標(biāo)題
 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')

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

以上這篇Django REST Framework序列化外鍵獲取外鍵的值方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 好用的Python編輯器WingIDE的使用經(jīng)驗(yàn)總結(jié)

    好用的Python編輯器WingIDE的使用經(jīng)驗(yàn)總結(jié)

    WingIDE是個(gè)專為python程序語言設(shè)計(jì)的集成開發(fā)環(huán)境。從1999年起,Wingware公司便開始專注于python開發(fā),目前WingIDE已經(jīng)是著名的python開發(fā)框架,面向項(xiàng)目風(fēng)格的 IDE 對于大型產(chǎn)品非常有用, 是個(gè)很有前途的開發(fā)環(huán)境。
    2016-08-08
  • Python3.6中Twisted模塊安裝的問題與解決

    Python3.6中Twisted模塊安裝的問題與解決

    這篇文章主要介紹了Python3.6中Twisted模塊安裝的問題與解決,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python pygame實(shí)現(xiàn)五子棋小游戲

    python pygame實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 純python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之kNN算法示例

    純python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之kNN算法示例

    本篇文章主要介紹了純python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之kNN算法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python3實(shí)現(xiàn)轉(zhuǎn)換Image圖片格式

    Python3實(shí)現(xiàn)轉(zhuǎn)換Image圖片格式

    本篇文章給大家分享了Python3實(shí)現(xiàn)在線轉(zhuǎn)換Image圖片格式的功能以及相關(guān)實(shí)例代碼,有興趣的朋友參考下。
    2018-06-06
  • 在 Jupyter 中重新導(dǎo)入特定的 Python 文件(場景分析)

    在 Jupyter 中重新導(dǎo)入特定的 Python 文件(場景分析)

    Jupyter 是數(shù)據(jù)分析領(lǐng)域非常有名的開發(fā)環(huán)境,使用 Jupyter 寫數(shù)據(jù)分析相關(guān)的代碼會大大節(jié)約開發(fā)時(shí)間。這篇文章主要介紹了在 Jupyter 中如何重新導(dǎo)入特定的 Python 文件,需要的朋友可以參考下
    2019-10-10
  • Python解析微信dat文件的方法

    Python解析微信dat文件的方法

    這篇文章主要介紹了Python解析微信dat文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python list元素為tuple時(shí)的排序方法

    python list元素為tuple時(shí)的排序方法

    下面小編就為大家分享一篇python list元素為tuple時(shí)的排序方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python獲取時(shí)間及時(shí)間格式轉(zhuǎn)換問題實(shí)例代碼詳解

    python獲取時(shí)間及時(shí)間格式轉(zhuǎn)換問題實(shí)例代碼詳解

    這篇文章主要介紹了python獲取時(shí)間及時(shí)間格式轉(zhuǎn)換,需要的朋友可以參考下
    2018-12-12
  • Python利用pandas對數(shù)據(jù)進(jìn)行特定排序

    Python利用pandas對數(shù)據(jù)進(jìn)行特定排序

    本文主要介紹了Python利用pandas對數(shù)據(jù)進(jìn)行特定排序,主要使用?pandas.DataFrame.sort_values?方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03

最新評論

上饶市| 岢岚县| 东乡族自治县| 林西县| 博野县| 莆田市| 澎湖县| 扬中市| 青田县| 高清| 湘乡市| 蒲城县| 平安县| 台江县| 乃东县| 屏东县| 循化| 东光县| 板桥市| 南澳县| 阳信县| 白水县| 通海县| 邯郸市| 宜州市| 汽车| 交城县| 浮梁县| 宝鸡市| 长岛县| 陇西县| 康马县| 南雄市| 双柏县| 凌海市| 杭州市| 大连市| 丰城市| 开阳县| 若羌县| 兴安盟|