2017-02-26 62 views
0

我有这样的代码:Django的串行化/反序列化两个值到一个模型字段

models.py

from django.contrib.gis.db import models 

class Driver(models.Model): 
    location = models.PointField(null=True, blank=True) 
    accuracy = models.DecimalField(max_digits=10, decimal_places=3) 

serializers.py

from rest_framework import serializers 
from .models import Driver 

class DriverSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Driver 
     fields = '__all__' 

的PointField被序列化为

{"location":"SRID=4326;POINT (106.84341430665 -6.1832427978516)"} 

但我会l ike得到

{"latitude": 106.84341430665, "longitude": -6.1832427978516} 

当序列化,也使用这种格式进行反序列化。是否有可能在序列化程序中执行此操作?

回答

0

谢谢masnun指向正确的方向。这是我想出了:

from rest_framework import serializers 
from django.contrib.gis.geos import Point 
from .models import Driver 

class DriverSerializer(serializers.ModelSerializer): 
    location = serializers.SerializerMethodField() 
    latitude = serializers.FloatField() 
    longitude = serializers.FloatField() 
    class Meta: 
     model = Driver 
     fields = '__all__' 

    def get_location(self, obj): 
     return Point(obj.latitude, obj.longitude)  

    def to_representation(self, instance): 
     ret = super(DriverSerializer, self).to_representation(instance) 
     lat, lon = ret['location'].coords 
     ret['latitude'] = lat 
     ret['longitude'] = lon 
     del ret['location'] 
     return ret 

反序列化(JSON - >模型)是通过添加两个新领域的DriverSerializer,与SerializerMethodField覆盖现有的“位置”字段和实施get_<field_name>处理。 http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

to_representation涉及序列化(模型 - > json)部分。

相关问题