事实如下: 我正在使用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? 如果是,我如何获得我需要的网址?
答案 0 :(得分:0)
实际上,正如评论中所建议的那样,反过来就可以了。 解决方案是:
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)
编辑:错字