DRF:向Serializer添加“url”字段会导致浏览API时出现“无法解析URL”错误

时间:2016-02-05 00:55:50

标签: python django django-rest-framework

我是Django REST Framework的新手,一段时间以来似乎非常简单。我有一个Serializer,我正在尝试切换到HyperLinkedModelSerializer。我浏览了DRF快速入门指南,我认为我的Serializer和Viewset与那里的例子非常相似:

class PickViewset(viewsets.ModelViewSet):

  queryset = Pick.objects.all()
  serializer_class = PickSerializer

class PickSerializer(serializers.HyperlinkedModelSerializer):
  sheet = SheetSerializer()
  game = GameSerializer()
  class Meta:
    model = Pick
    fields = ('url', 'sheet', 'amount', 'spread', 'pick_type', 'pick_team', 'game')

添加路由器:

router.register(r'pick', PickViewset, base_name='picks')

当省略url字段时,pick端点显示在可浏览的API上,我可以查看对象。但是,只要我添加url,就会收到此错误:

ImproperlyConfigured at /api/pick/
Could not resolve URL for hyperlinked relationship using view name "pick-detail". 
You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.

我的理解是使用ViewSet会自动处理详细信息视图,我认为模型已正确包含在内。这留下了lookup_field,但我不确定这里有什么问题。我希望问题能够检索到任何结果。

我尝试将lookupfield = 'id'添加到PickViewset,但这没有帮助。我也尝试用GameSerializer做同样的事情 - 创建一个Viewset并添加到路由器,但是我遇到了同样的错误。

1 个答案:

答案 0 :(得分:0)

我知道这必须简单,事实证明这是真的。我正在为PickViewSet使用base_name,这是不必要的。我还不确定为什么这样做不起作用(我尝试将base_name更改为'选择'以匹配模型名称,但这也不起作用),但我和#39;我将继续阅读ViewSets如何自动生成详细信息视图。

只需删除base_name即可开始工作。