我希望使用django-rest-framework为使用mongodb的休息服务提供可浏览的API。 具体来说,我希望能够将url指向所有文章列表中的实际GET方法。
我有以下型号和序列化器:
class Article(mongoengine.Document):
article_id = mongoengine.StringField(required=True)
author_id = mongoengine.StringField(required=True)
content = mongoengine.StringField(required=True)
class ArticleSerializer(serializers.Serializer):
url = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='article-detail')
article_id = serializers.CharField(required=True)
author_id = serializers.CharField(required=True)
content = serializers.CharField(required=True)
def restore_object(self, attrs, instance=None):
if instance is not None:
for k, v in attrs.iteritems():
setattr(instance, k, v)
return instance
return Article(**attrs)
但是在运行时我收到以下错误:
AttributeError:'Article'对象没有属性'url'
我尝试将url属性添加到模型中,但在任何情况下,在序列化对象时都不会添加正确的url。 什么会正确使用serializers.HyperlinkedRelatedField为我的mongo对象文章?
修改
我认为这几乎要归功于Climax。我改为
serializers.HyperlinkedIdentityField(view_name='article-detail', lookup_field='article_id')
但我得到
{“url”:“/ article / 125 /”,“article_id”:“125”}。
如何才能拥有DNS名称,以便API真正可浏览? 例如:
{“url”:“http://example.com:1234/article/125/”,“article_id”:“125”}
答案 0 :(得分:2)
您必须使用HyperlinkedIdentityField
。同样在这种情况下,任何方向的关系都不多,因为此序列化器用于单个对象。
url = serializers.HyperlinkedIdentityField(many=False, read_only=True, view_name='article-detail')