2016-04-14 102 views
0

我正在託管一個API,爲此,我使用的是Django Rest Framework。我有一個模型,我通過API獲取一些數據,通過&模型序列化器存儲在數據庫中。Django:ModelSerializer的自定義字段映射

我的問題是,MySQL表中的列名與我在託管的API上獲取的數據不同。例如:

{ 
    "a": "b", 
    "c": "d", 
    "e": "f", 
} 

我的模型如下:

class Table(models.Model): 
    x = models.CharField(max_length=25,primary_key=True) 
    y = models.CharField(max_length=25) 
    z = models.CharField(max_length=25) 

串行:

class TableSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Table 
     fields = ('x', 'y', 'z') 

我該如何映射a -> xb -> yc -> z

通過API數據得到?

+0

如何在create方法中使用a,b,c和map的新序列化程序? – ilse2005

回答

1

在你TableSerializer類,可以手動創建映射:

class TableSerializer(serializers.ModelSerializer): 
    a = models.CharField(source='x', max_length=25, primary_key=True) 
    b = models.CharField(source='y', max_length=25) 
    c = models.CharField(source='z', max_length=25) 

    class Meta: 
     model = Table 
     fields = ('a', 'b', 'c') 

當您返回一個表例如,xyz屬性將被序列化爲abc。 同樣,當您通過API獲取一些數據時,這些字段將以相反方式映射。

你會得到在DRF docs

ilse2005的做法對一些更多的信息source作品:您可以覆蓋你的串行create方法等全部由自己做的映射,但添加source參數在串行領域,這將使您可以輕鬆創建,更新並返回Table實例。