2013-11-20 57 views
6

我想連載的模型有很多選擇,像這樣的:連載選擇文本IntegerField與選擇

class House(models.Model): 
ACCESSIBILITY_CHOICES = (
    (ACCESSIBILITY_FULL, 'Full'), 
    (ACCESSIBILITY_PARTIAL, 'Partial'), 
    (ACCESSIBILITY_NONE, 'None') 
) 

accessibility = models.IntegerField(max_length=1, choices=ACCESSIBILITY_CHOICES, null=True) 

我愛的是默認的序列,如:

class HouseView(generics.ListCreateAPIView): 
    model = House 
    serializer_class = HouseSerializer 

class HouseSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = House 

作品偉大的,如果我只想要整數值

{accessibility:1} 

不過,我想獲得

012什麼
{accessibility:'Full'} 

幫助表示感謝。 非常感謝。

回答

1

設置在串行領域的選擇,象這樣的原始值...

ACCESSIBILITY_CHOICES = (
    ('Full', 'Full'), 
    ('Partial', 'Partial'), 
    ('None', 'None') 
) 

然後看看重寫「to_native」的方法,使該字符串值會轉換成它們的整的等價物。

這應該給你一個使用字符串表示的外部API,而是一個使用整數表示的後端。

+0

好的,很酷。感謝您看這個。好,我檢查了沒有更覆蓋to_native聲明的解決方案。 –

6

您可以通過get_FOO_display方法獲得一個只讀序列化字段,其中包含具有選項的模型字段的詳細值。在字段上設置選項時,會自動添加此方法。您可以將該方法設置爲字符字段的來源。

對於也支持寫入數據的端點,我建議添加「普通」字段,並使用_name擴展名添加另一個只讀字段。

在你的例子中,以下應該產生你正在尋找的輸出。 accessibility_name是隻讀的,而accessibility用於允許寫入/更新值。

class HouseSerializer(serializers.ModelSerializer): 

    accessibility_name = serializers.CharField(source='get_accessibility_display') 

    class Meta: 
     model = House 
     fields = ('accessibility', 'accessibility_name',)