我正在托管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 -> x
,b -> y
,c -> z
?
答案 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实例时,x
,y
和z
属性将序列化为a
,b
和c
。
同样,当您通过API获取某些数据时,字段将以相反的方式进行映射。
您将在DRF docs
中获得有关source
的更多信息
ilse2005的方法有效:您可以覆盖序列化程序中的create方法并自行完成映射,但在序列化器字段中添加source
参数,这样您就可以创建,更新并返回{{1}实例很容易。