Mongoengine 序列化错误 | Python | Django REST 框架

1 投票
1 回答
1130 浏览
提问于 2025-04-18 17:27

我在使用 Django Rest Framework 和 mongoengine 时,遇到了关于 "PointField" 的序列化问题。

下面是我的模型代码

 from mongoengine import *
 import datetime
  class Location(Document):
    user_id = StringField(required=True)
    location_title = StringField(required=False)
    location_type = StringField(required=False)
    coordinates = PointField(required=True)
    location_rating = IntField(required=True)
    reason = StringField(required=False)
    data_entry_date = DateTimeField(default=datetime.datetime.now)

接下来是我的序列化器代码

from rest_framework_mongoengine import serializers
from pycoreapi.models.location import Location
class LocationSerializer(serializers.MongoEngineModelSerializer):

    class Meta:
        model = Location
        depth = 3

我从 MongoDB 返回视图响应的方式是这样的

filtered_objects = Location.objects(coordinates__geo_within_sphere=[[longitude, latitude], radius / 6371])

serializer = LocationSerializer(filtered_objects)

return serializer.data, status.HTTP_200_OK

现在从 MongoDB 获取的过滤位置列表是正常的,但序列化器却不工作。

我遇到了以下错误

异常信息: 'PointField' 对象没有 '_get_val_from_obj' 这个属性

异常位置: ~/python2.7/site-packages/rest_framework/fields.py 的 field_to_native 函数,行号 422

我没有找到任何线索,请帮帮我。

1 个回答

3

rest-framework的mongoengine扩展没有针对地理字段的序列化器。

我觉得你最好的选择是创建一个自定义字段和序列化器。对于序列化器,你可以从 MongoengineModelSerializer 继承,并重写 get_field 方法。

撰写回答