42

我試圖從Django Rest Framework返回一個HttpResponse,其中包括來自2個鏈接模型的數據。 型號有:Django Rest框架 - 在串行器中獲取相關模型字段

class Wine(models.Model): 

    color = models.CharField(max_length=100, blank=True) 
    country = models.CharField(max_length=100, blank=True) 
    region = models.CharField(max_length=100, blank=True) 
    appellation = models.CharField(max_length=100, blank=True) 

class Bottle(models.Model): 

    wine = models.ForeignKey(Wine, null=False) 
    user = models.ForeignKey(User, null=False, related_name='bottles') 

我想擁有的瓶型,其中包括從葡萄酒相關信息的串行器。

我想:

class BottleSerializer(serializers.HyperlinkedModelSerializer): 
    wine = serializers.RelatedField(source='wine') 

    class Meta: 
     model = Bottle 
     fields = ('url', 'wine.color', 'wine.country', 'user', 'date_rated', 'rating', 'comment', 'get_more') 

不工作。

任何想法,我可以做到這一點?

謝謝:)

+0

感謝這個,我幾乎沒有。 @ tom-christie解釋瞭如何獲取對象本身,但我無法從Wine對象中獲取所有字段。 – bpipat

+0

嘗試將'source ='*''作爲'RelatedField'參數。 – mariodev

+0

我仍然在查詢結果中獲得unicode名稱。嘗試wine.color在字段中不起作用 source ='*'會發生什麼變化? – bpipat

回答

49

這麼簡單,添加WineSerializer作爲現場解決它。

class BottleSerializer(serializers.HyperlinkedModelSerializer): 
    wine = WineSerializer(source='wine') 

    class Meta: 
     model = Bottle 
     fields = ('url', 'wine', 'user', 'date_rated', 'rating', 'comment', 'get_more') 

有:

class WineSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Wine 
     fields = ('id', 'url', 'color', 'country', 'region', 'appellation') 

感謝您的幫助@mariodev :)

+0

很高興你把它整理一下。你也可以請解釋什麼'WineSerializer'類代表,所以我們有一個明確的答案。 – mariodev

+0

完成,謝謝你的請求 – bpipat

+1

我已經這樣做,但我得到的下游錯誤'HyperlinkedRelatedField需要序列化器中的請求上下文。在實例化序列化程序時添加上下文= {'request':request}'。我究竟做錯了什麼? – arturataide

相關問題