[英]Django: Custom field mapping for ModelSerializer
我托管一个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
?
在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文档中获得有关source
更多信息。
ilse2005的方法有效:您可以在序列化程序中覆盖create方法,并自己进行映射,但可以在序列化程序字段中添加source
参数,这将使您轻松创建,更新和返回Table
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.