【问题标题】:Django REST: serialize url to list of objects of a categoryDjango REST:将 url 序列化为一个类别的对象列表
【发布时间】:2018-04-12 07:43:47
【问题描述】:

确凿的事实: 我正在使用 Django 2.0 和 python 3.6,如果有什么不同的话。

我想要实现的是指向属于摘要的对象列表的链接。 我的 models.py 中有一个 ManyToOne 关系。

class Summary(models.model):
  type=models.CharField

class Object(models.Model):
  summary= models.ForeignKey(Summary, on_delete=models.CASCADE)

在 urls.py 中

object_list= views.ObjectListViewSet.as_view({
    'get': 'list'
})
urlpatterns = format_suffix_patterns([
    url(r'^summary/(?P<pk>[^/.]+)/objects/$', object_list, name='summary-objects')
])

现在的想法是让用户可以点击可浏览 API 中的 URL 并获取所有对象。 因此,我尝试在 serializers.py 中编写 MethodField。我无法在这里获得任何合理的 URL,唯一的解决方案是对其进行硬编码。

class SummarySerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name="app:summary-detail")

    objects= serializers.SerializerMethodField('get_obj_url')

    def get_obj_url(self, obj):
        pass

    class Meta:
        model = Summary

这可能吗? 有必要写一个MethodField吗? 如果是,我如何获得我需要的网址?

【问题讨论】:

标签: python django rest serialization


【解决方案1】:

实际上,正如 cmets 中所建议的,reverse 可以解决问题。 解决办法是:

def get_obj_url(self, obj):
    request = self.context.get('request')
    return request.build_absolute_uri(reverse('api-root')) + 'summary/{id}/objects'.format(
        id=obj.id)

编辑:错字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2017-07-12
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多