我想要一个使用 django-rest-framework 的可浏览 API 来使用 mongodb 作为模型的休息服务。具体来说,我希望能够在所有文章的列表中使 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:“文章”对象没有属性“url”
我尝试将 url 属性添加到模型中,但无论如何,当对象被序列化时,都不会添加正确的 url。对我的 mongo 对象文章,serializers.HyperlinkedRelatedField 的正确用途是什么?
编辑:
我想这要归功于 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”}