Django Rest Framework - 使用视图名称“user-detail”无法解析超链接关系的URL [英] Django Rest Framework - Could not resolve URL for hyperlinked relationship using view name "user-detail"

查看:474
本文介绍了Django Rest Framework - 使用视图名称“user-detail”无法解析超链接关系的URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Django Rest框架中建立一个项目,用户可以在其中登录查看他们的酒窖。
我的ModelViewSets工作正常,突然间我得到这个令人沮丧的错误:


无法解析超链接关系的URL使用视图名称user-detail。您可能无法在您的API中包含相关模型,或者错误地在此字段上配置了 lookup_field 属性。


追溯显示:

  [12 / Dec / 2013 18:35:29] GET / bottles / HTTP / 1.1500 76677 
内部服务器错误:/瓶/
追溯(最近的最后一次呼叫):
文件/Users/bpipat/.virtualenvs/usertest2/lib /python2.7/site-packages/django/core/handlers/base.py,第114行,在get_response
response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件/ Users /bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/viewsets.py,第78行,视图
return self.dispatch(request,* args,** kwargs)
文件/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/views/decorators/csrf.py,第57行,wrapped_view
return view_func(* args, ** kwargs)
文件/Users/bpipat/.virtualenvs/usertest2/lib/py thon2.7 / site-packages / rest_framework / views.py,第399行,调度
response = self.handle_exception(exc)
文件/Users/bpipat/.virtualenvs/usertest2/lib/ python2.7 / site-packages / rest_framework / views.py,第396行,在调度中
response = handler(request,* args,** kwargs)
文件/Users/bpipat/.virtualenvs /usertest2/lib/python2.7/site-packages/rest_framework/mixins.py,第96行,列表
return响应(serializer.data)
文件/Users/bpipat/.virtualenvs/ usertest2 / lib / python2.7 / site-packages / rest_framework / serializers.py,第535行,数据
self._data = [self.to_native(item)for obj]
文件 /Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/serializers.py,第325行,in_native
value = field.field_to_native(obj,field_name)
文件/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/relations.py,第153行,field_to_native
return self.to_ native(value)
文件/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/relations.py,第452行,to_native
raise异常(msg %view_name)
异常:使用视图
名称user-detail无法解析超链接关系的URL。您可能未能在
中将相关模型包含在您的API中,或者错误地在
字段上配置了lookup_field属性。

我有一个自定义的电子邮件用户模型,models.py中的瓶子模型是:

  class Bottle(models.Model):
wine = models.ForeignKey(Wine,null = False)
user = models.ForeignKey(User,null = False,related_name ='bottles')

我的序列化器: p>

  class BottleSerializer(serializers.HyperlinkedModelSerializer):

class Meta:
model = Bottle
fields =('url','wine','user')

class UserSerializer(serializers.ModelSerializer):

class Meta:
model =用户
fields =('email','first_name','last_name','password','is_superuser')

我的意见:

  class BottleViewSet(viewsets.ModelViewSet):

允许查看或编辑瓶子的API端点

queryset = Bottle.objects.all()
serializer_class = BottleSerializer

class UserViewSet(ListCreateAPIView):

允许用户查看或编辑的API端点。

queryset = User.objects.all()
serializer_class = UserSerializer

,最后是url:

  router = router.DefaultRouter()
router.register r'bottles',views.BottleViewSet,base_name ='bottles')

urlpatterns = patterns('',
url(r'^',include(router.urls)),
#...

我没有用户详细信息视图,我不看到这个问题可能来自哪里?任何想法?



谢谢

解决方案

p>因为它是一个 HyperlinkedModelSerializer 您的序列化程序正在尝试解析您的<$ c $相关的用户的URL c>瓶。

由于您没有用户详细信息视图,因此无法执行此操作。因此异常。


  1. 不会只在路由器注册 UserViewSet 解决您的问题?

  2. 你cou ld定义您的 BottleSerializer 上的用户字段,以明确使用 UserSerializer 而不是尝试解析该URL。有关处理嵌套对象的序列化文档


I am building a project in Django Rest Framework where users can login to view their wine cellar. My ModelViewSets were working just fine and all of a sudden I get this frustrating error:

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

The traceback shows:

    [12/Dec/2013 18:35:29] "GET /bottles/ HTTP/1.1" 500 76677
Internal Server Error: /bottles/
Traceback (most recent call last):
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/viewsets.py", line 78, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 57, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/views.py", line 399, in dispatch
    response = self.handle_exception(exc)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/views.py", line 396, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/mixins.py", line 96, in list
    return Response(serializer.data)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/serializers.py", line 535, in data
    self._data = [self.to_native(item) for item in obj]
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/serializers.py", line 325, in to_native
    value = field.field_to_native(obj, field_name)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/relations.py", line 153, in field_to_native
    return self.to_native(value)
  File "/Users/bpipat/.virtualenvs/usertest2/lib/python2.7/site-packages/rest_framework/relations.py", line 452, in to_native
    raise Exception(msg % view_name)
Exception: Could not resolve URL for hyperlinked relationship using view 
name "user-detail". You may have failed to include the related model in 
your API, or incorrectly configured the `lookup_field` attribute on this 
field.

I have a custom email user model and the bottle model in models.py is:

class Bottle(models.Model):    
      wine = models.ForeignKey(Wine, null=False)
      user = models.ForeignKey(User, null=False, related_name='bottles')

My serializers:

class BottleSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Bottle
        fields = ('url', 'wine', 'user')

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('email', 'first_name', 'last_name', 'password', 'is_superuser')

My views:

class BottleViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows bottles to be viewed or edited.
    """
    queryset = Bottle.objects.all()
    serializer_class = BottleSerializer

class UserViewSet(ListCreateAPIView):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer

and finally the url:

router = routers.DefaultRouter()
router.register(r'bottles', views.BottleViewSet, base_name='bottles')

urlpatterns = patterns('',
    url(r'^', include(router.urls)),
    # ...

I don't have a user detail view and I don't see where this issue could come from. Any ideas?

Thanks

解决方案

Because it's a HyperlinkedModelSerializer your serializer is trying to resolve the URL for the related User on your Bottle.
As you don't have the user detail view it can't do this. Hence the exception.

  1. Would not just registering the UserViewSet with the router solve your issue?
  2. You could define the user field on your BottleSerializer to explicitly use the UserSerializer rather than trying to resolve the URL. See the serializer docs on dealing with nested objects for that.

这篇关于Django Rest Framework - 使用视图名称“user-detail”无法解析超链接关系的URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆