Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django.core.exceptions.ImpropertlyConfigured:无法使用视图名称“解析超链接关系的URL”;“用户详细信息”;_Python_Django_Rest_Hyperlink_Django Rest Framework - Fatal编程技术网

Python django.core.exceptions.ImpropertlyConfigured:无法使用视图名称“解析超链接关系的URL”;“用户详细信息”;

Python django.core.exceptions.ImpropertlyConfigured:无法使用视图名称“解析超链接关系的URL”;“用户详细信息”;,python,django,rest,hyperlink,django-rest-framework,Python,Django,Rest,Hyperlink,Django Rest Framework,TL;医生:我发现了这个错误,不知道为什么: django.core.exceptions.ImpropertlyConfigured:无法使用视图名称“user detail”解析超链接关系的URL。您可能未能将相关模型包括在API中,或者在此字段上错误配置了“lookup\u field”属性 我正在经历和目前的情况,基于函数的视图(FBV)被切换到基于类、mixin和泛型的视图(分别是CBV、MBV和GBV)。在切换到GBV之后,当我去测试我的API时,我收到了以下错误AssertionE

TL;医生:我发现了这个错误,不知道为什么:

django.core.exceptions.ImpropertlyConfigured:无法使用视图名称“user detail”解析超链接关系的URL。您可能未能将相关模型包括在API中,或者在此字段上错误配置了“lookup\u field”属性

我正在经历和目前的情况,基于函数的视图(FBV)被切换到基于类、mixin和泛型的视图(分别是CBV、MBV和GBV)。在切换到GBV之后,当我去测试我的API时,我收到了以下错误
AssertionError:预期使用名为“pk”的URL关键字参数调用view SnippetDetail。修复URL配置,或在视图上正确设置“.lookup\u field”属性。
。我做了一些研究,发现
lookup\u字段
。目前,my urls.py的外观如下:

from django.conf.urls import url, include
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views

# API endpoints
urlpatterns = format_suffix_patterns([
    url(r'^$', views.api_root),
    url(r'^snippets/$',
        views.SnippetList.as_view(),
        name='snippet-list'),
    url(r'^snippets/(?P<id>[0-9]+)/$',
        views.SnippetDetail.as_view(),
        name='snippet-detail'),
    url(r'^users/$',
        views.UserList.as_view(),
        name='user-list'),
    url(r'^users/(?P<id>[0-9]+)/$',
        views.UserDetail.as_view(),
        name='user-detail')
])

# Login and logout views for the browsable API
urlpatterns += [
    url(r'^auth/', include('rest_framework.urls',
                           namespace='rest_framework')),
]
当我在UserDetail和SnippetDetail中添加
lookup\u field='id'
时,异常会自行解决。(耶!)。但是,当我访问
时配置不正确:无法使用视图名“user detail”解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误配置了“lookup\u field”属性。
被抛出。但是,当我检查控制台时,还有第二个异常:

django.url.exceptions.NoReverseMatch:与“用户详细信息”相反 未找到参数“()”和关键字参数“{'pk':1}”。2. 尝试的模式:[“用户/(?P[0-9]+)\。(?P[a-z0-9]+)/?$”, “用户/(?P[0-9]+)/$”]

在处理上述异常期间,发生了另一个异常:

django.core.exceptions.ImpropertlyConfigured:无法解析的URL 使用视图名称“用户详细信息”的超链接关系。你可能有 未能将相关模型包括在API中,或不正确 在此字段上配置了“查找字段”属性

我发现有趣的是,第一个异常的kwargs是
{'pk':1}
,而不是
{'id':1}
。在聊天室的帮助下,有人向我指出了一条信息:

请注意,在使用超链接API时,如果需要使用自定义值,则需要确保API视图和序列化程序类都设置了查找字段

这在
用户
序列化程序扩展
超链接模型序列化程序
时非常有用:

from rest_framework import serializers

from django.contrib.auth.models import User

from snippets.models import Snippet

class UserSerializer(serializers.HyperlinkedModelSerializer):
    snippets = serializers.HyperlinkedRelatedField(many=True, view_name='snippet-detail', read_only=True)

    class Meta:
        model = User
        fields = ('url', 'id', 'username', 'snippets')
用户
模型和序列化程序与
代码段
具有相反的关系。现在,当我向
UserSerializer
的snippets属性添加
lookup\u field='id'
snippets=serializers.HyperlinkedRelatedField(many=True,view\u name='snippet-detail',read\u only=True,lookup\u field='id')
)时,就像它要求我这样做一样,错误是持久的

我做错了什么?我能做些什么来解决这个问题?它是否与
查找\u id
无关


我知道我可以在我的urlpatterns中将
替换为
,但我想知道为什么会发生这种情况。

我最终通过在Django shell/python交互控制台中打印序列化程序修复了第二个异常。我得到的结果是:

>>> from snippets.serializers import UserSerializer
>>> print(UserSerializer())
UserSerializer():
    url = HyperlinkedIdentityField(view_name='user-detail')
    id = IntegerField(label='ID', read_only=True)
    username = CharField(help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, validators=[<django.contrib.auth.validators.UnicodeUsernameValidator object>, <UniqueValidator(queryset=User.objects.all())>])
    snippets = HyperlinkedRelatedField(lookup_field='id', many=True, read_only=True, view_name='snippet-detail')
>>来自snippets.serializers导入UserSerializer
>>>打印(UserSerializer())
UserSerializer():
url=HyperlinkedEntityField(查看\u name='user-detail')
id=IntegerField(label='id',只读=True)
username=CharField(help_text='Required.150个字符或更少。仅限字母、数字和@/+/-/.',最大长度=150,验证器=[,]))
snippets=HyperlinkedRelatedField(查找字段='id',多个=True,只读=True,查看\u name='snippet-detail')

事实证明,要在urlspatterns中将
更改为
,您需要在
UserSerializer
类中添加
url=hyperlinkedEntityField(查看\u name='user-detail',查找\u field='id')

我也遇到了同样的问题,我发现,
hyperlinkedEntityField
想要在你的URL中插入一些占位符。但我使用的URL不需要设置任何占位符。准确地说,
ListCreateAPIView

url(
    r'^users/$',                  #<-- takes no params
    views.UserListView.as_view(), #<-- just prints a list 
    name="user-list"              #<-- HyperlinkedIdentityField pointing 
),                                #     here complained bitterly.
url(

r“^users/$”,这是一个很长的问题,但完整堆栈跟踪的基本信息还没有包括在内。另外,请尽量简短一点。啊,是的。我最终找到了答案。我很快会给出答案。
url(
    r'^users/$',                  #<-- takes no params
    views.UserListView.as_view(), #<-- just prints a list 
    name="user-list"              #<-- HyperlinkedIdentityField pointing 
),                                #     here complained bitterly.