Django:ModelSerializer

时间:2016-04-14 14:12:29

标签: python mysql django django-rest-framework django-serializer

我正在托管API,为此,我正在使用Django Rest Framework。我有一个模型,我通过API获取一些数据,通过模型和数据存储在数据库中。模型序列化器。

我的问题是MySQL表中的列名与我在主持的API上获得的数据不同。例如:

通过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

1 个答案:

答案 0 :(得分:2)

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

当您返回Table实例时,xyz属性将序列化为abc 。 同样,当您通过API获取某些数据时,字段将以相反的方式进行映射。

您将在DRF docs

中获得有关source的更多信息

ilse2005的方法有效:您可以覆盖序列化程序中的create方法并自行完成映射,但在序列化器字段中添加source参数,这样您就可以创建,更新并返回{{1}实例很容易。