django REST:如何在一对多关系中序列化objectId()

时间:2014-11-07 03:41:44

标签: django-rest-framework mongoengine

我有一个mongodb后端与mongoengine - DRF服务。我有一个非常简单的一对多关系场景:

模型:

class Photo(Document):
    path = StringField()
    title = StringField()
    owner = ReferenceField('User')



class User(Document):
    first_name = StringField()
    last_name = StringField()
    photos = ListField(ReferenceField(Photo, reverse_delete_rule=CASCADE))

现在,当我访问/api/users/时,我希望用户JSON对象包含一个photos键,该键只是Photo ObjectIds的数组,而不是整个照片对象。这是我的序列化器:

class UserSerializer(MongoEngineModelSerializer):
    photos = serializers.SlugRelatedField(many=True, read_only=True, slug_field="id")

    class Meta:
        model = User
        exclude=()

我收到了错误 -

ObjectId("...") is not JSON serializable

当我将slug_field替换为title时,它可以正常工作。任何帮助都会很棒!

此外,这是解决我需要记录PhotoUser模型上的一对多关系的关系的正确方法 - 对我来说似乎有些多余。

1 个答案:

答案 0 :(得分:0)

确保slug_field名称是该字段在数据库列中的名称。检查数据库。钥匙本来可以附加" _id"以你给该列的名字开头。