Django Rest Framework - 使用视图名称“user-detail”无法解析超链接关系的URL [英] Django Rest Framework - Could not resolve URL for hyperlinked relationship using view name "user-detail"
问题描述
我的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>瓶。
由于您没有用户详细信息视图,因此无法执行此操作。因此异常。
- 不会只在路由器注册
UserViewSet
解决您的问题? - 你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.
- Would not just registering the
UserViewSet
with the router solve your issue? - You could define the user field on your
BottleSerializer
to explicitly use theUserSerializer
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屋!