2016-04-14 105 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实例。