【问题标题】:Mongoengine Serializer Error | Python | Django rest frameworkMongoengine 序列化程序错误 |蟒蛇 | Django 休息框架
【发布时间】:2014-10-09 14:30:08
【问题描述】:

我在使用 django rest 框架的 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 行

没有任何线索,请帮忙。

【问题讨论】:

    标签: python python-2.7 django-rest-framework mongoengine


    【解决方案1】:

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

    我认为您最好的选择是创建自定义字段和序列化程序。对于序列化程序,您可以从 MongoengineModelSerializer 继承并覆盖 get_field

    【讨论】:

    • 谢谢snahor。正如您所建议的,我已将点字段转换为列表字段,现在它按预期工作。将此标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多