我正在Django Rest Framework中构建一个项目,用户可以登录查看他们的酒窖.我的ModelViewSets工作得很好,突然间我得到了这个令人沮丧的错误:
无法使用视图名称"user-detail"解析超链接关系的URL.您可能未能在API中包含相关模型,或者未
lookup_field
在此字段上错误地配置属性.
追溯显示:
[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.
我有一个自定义电子邮件用户模型,models.py中的瓶子模型是:
class Bottle(models.Model): wine = models.ForeignKey(Wine, null=False) user = models.ForeignKey(User, null=False, related_name='bottles')
我的序列化器:
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')
我的观点:
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
最后是网址:
router = routers.DefaultRouter() router.register(r'bottles', views.BottleViewSet, base_name='bottles') urlpatterns = patterns('', url(r'^', include(router.urls)), # ...
我没有用户详细信息视图,我也看不出这个问题可能来自哪里.有任何想法吗?
谢谢