我有一个名为Collection
的类class Collection(models.Model):
slug = models.CharField(max_length=32, primary_key=True)
name = models.CharField(max_length=200)
description = models.TextField()
user = models.ForeignKey(User)
videos = ListField(models.ForeignKey(Video))
pub_date = models.DateTimeField('date published')
objects = MongoDBManager()
有一个视频属性,它是Video对象ForeignKeys的ListField。
当我尝试在rest_framework上串行化Collection对象时,创建我的序列化器:
class CollectionSerializer(serializers.HyperlinkedModelSerializer):
videos = VideoSerializer(many=True)
class Meta:
model = Collection
fields = ('name','description','videos', 'pub_date')
但是我收到了这个错误:
Got AttributeError when attempting to get a value for field `name` on serializer `VideoSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `unicode` instance.
Original exception text was: 'unicode' object has no attribute 'name'.
尽管使用 VideoSerializer 我使用了 serializers.StringRelatedField 然后我得到一个objectids数组作为字符串。但我想要的是序列化器来获取oobjectids数组并将它们转换为Vido Objects并将它们序列化。
MongoDB上的对象如下所示:
{
"_id": "ibiza",
"user_id": {
"$oid": "5564c86e424f777f81d8f3ec"
},
"description": "ertertertre",
"videos": [
{
"$oid": "5564d0c8424f7704aea99813"
}
],
"pub_date": {
"$date": "2015-05-27T12:20:57.000Z"
},
"name": "Ibiza"
}
注意:我想避免使用EmbeddedModelField
答案 0 :(得分:0)
这里的问题是您将字符串(unicode
类型)传递给DRF,但您希望DRF将其转换为嵌套表示形式。没有任何额外的东西,DRF是不可能这样做的,因为它超出了它试图维护的一般范围。
Django REST framework Mongoengine处理抽象层非常好,建议那些使用Django REST框架和Mongoengine的人。
如果没有抽象层,您将被迫create a custom field将对象ID转换为实际对象,然后将它们序列化为嵌套表示。