Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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 Rest框架超链接命名空间配置不正确_Python_Django_Rest_Python 3.x_Django Rest Framework - Fatal编程技术网

Python Django Rest框架超链接命名空间配置不正确

Python Django Rest框架超链接命名空间配置不正确,python,django,rest,python-3.x,django-rest-framework,Python,Django,Rest,Python 3.x,Django Rest Framework,我读了很多关于使用名称空间时影响DRF超链接的问题。但到目前为止,我并没有按照Github和Stackoverflow上的提示和建议来解决我的问题 我最近在我的URL.py中添加了名称空间 urlpatterns = patterns('', # API url(r'^api/', include(core_api_router.urls, namespace='api')),

我读了很多关于使用名称空间时影响DRF超链接的问题。但到目前为止,我并没有按照Github和Stackoverflow上的提示和建议来解决我的问题

我最近在我的URL.py中添加了名称空间

urlpatterns = patterns('',
                    # API
                    url(r'^api/', include(core_api_router.urls, namespace='api')),
                    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
                    url(r'^api-docs/', include('rest_framework_swagger.urls', namespace='api_docs'), name='api_docs'),
                   )
这是我的api.py

class MyBaseModelSerializer(DynamicModelSerializerMixin, serializers.ModelSerializer):

    status = serializers.HyperlinkedRelatedField(many=True, view_name='api:mybasemodel', read_only=True)

        class Meta:
            model = models.MyBaseModel
            fields = ('id', 'href', 'url', 'sid', 'name', 'status', 'created',)
            ordering_fields = '__all__'
            ordering = ('name',)

class ChangeViewSet(viewsets.ModelViewSet):
    queryset = models.MyBaseModel.objects.all().select_related('status')
    serializer_class = MyBaseModelSerializer

router.register('core/mybasemodel', MyBaseModelViewSet)


class MyRelatedModelSerializer(serializers.ModelSerializer):

    id = serializers.UUIDField(read_only=True)
    href = serializers.HyperlinkedIdentityField(view_name='api:myrelatedmodel')

        class Meta:
            fields = ('id', 'href', 'key', 'comment', 'position', 'created')
            ordering_fields = '__all__'
            ordering = ('position',)

class MyRelatedViewSet(viewsets.ModelViewSet):
    queryset = models.MyRelatedModel.objects.all()
    serializer_class = MyRelatedSerializer

 router.register('core/myrelatedmodel', MyRelatedModelViewSet)
在测试中,我检查是否可以通过API修改现有对象

def test_api_update(self):
    # Create an entry
    entry = self.Meta.factory.create()

    url = reverse('api:'+self.api_model_url+'-detail', args=[str(entry.id)])

    data = {'sid': 'Modified Entry'}

    # Check that an entry can be altered by an administrator via the API
    self.api_client.login(username='admin', password='admin')
    response = self.api_client.patch(url, data, format='json')
    content = self.parse_json_response(response, Status.HTTP_200_OK)
    self.assertEqual(content['sid'], 'Modified Entry')
Django引发此异常:

django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "mybasemodel-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
dmw.apps.core.views: ERROR: E500 : 127.0.0.1 : admin-user : http://testserver/api/core/api:mybasemodel/121e6850-3cd8-4795-d9bc-axsa04d1bd12/
我的应用程序运行在Python3.4和Django 1.8.9以及Django Rest Framework 3.3.2上,我已经尝试了这两种版本:

router = routers.DefaultRouter()

提前感谢您的帮助


干杯

问题似乎出现在两个序列化程序的
HyperlinkedEntityField
MyBaseModelSerializer
MyRelatedModelSerializer
。 在
view\u name
中,您必须指定全名,而不是像您那样仅指定基本名称。从

视图名称-应用作关系目标的视图名称。如果您使用的是标准路由器类,这将是一个格式为-detail的字符串

因此,您应该在那里添加
-detail
(就像您在测试中所做的那样):


问题似乎出现在两个序列化程序的
HyperlinkedEntityField
MyBaseModelSerializer
MyRelatedModelSerializer
。 在
view\u name
中,您必须指定全名,而不是像您那样仅指定基本名称。从

视图名称-应用作关系目标的视图名称。如果您使用的是标准路由器类,这将是一个格式为-detail的字符串

因此,您应该在那里添加
-detail
(就像您在测试中所做的那样):


遇到类似问题,通过更正
serializer.py
中的字段解决。检查与模型字段对应的字段。任何不匹配的字段都会产生此类错误

例如,我的默认身份验证模型具有以下字段: (运行迁移后Django Auth模型中的默认字段)

序列化程序所做的是:从模型中提取指定字段,然后将其转换为json进行API处理

因此,如果您命令序列化程序拾取同一模型(表)的数据库中肯定不存在的字段,则会出现此错误


我希望它能解决

遇到类似问题,通过更正
serializer.py
中的字段解决。检查与模型字段对应的字段。任何不匹配的字段都会产生此类错误

例如,我的默认身份验证模型具有以下字段: (运行迁移后Django Auth模型中的默认字段)

序列化程序所做的是:从模型中提取指定字段,然后将其转换为json进行API处理

因此,如果您命令序列化程序拾取同一模型(表)的数据库中肯定不存在的字段,则会出现此错误


我希望它能解决

我的回答对你有帮助吗?如果是这样,请接受它。它仍然不起作用,但我现在没有时间进一步调查。。我会接受你的回答,因为这是解决这个问题的第一步!:)它应该同时适用于简单路由器和默认路由器,对吗?我的回答对你有帮助吗?如果是这样,请接受它。它仍然不起作用,但我现在没有时间进一步调查。。我会接受你的回答,因为这是解决这个问题的第一步!:)它应该同时适用于简单路由器和默认路由器,对吗?
routeur = routeurs.SimpleRouter()
# MyBaseModelSerializer
status = serializers.HyperlinkedRelatedField(many=True, view_name='api:mybasemodel-detail', read_only=True)

# MyRelatedModelSerializer
href = serializers.HyperlinkedIdentityField(view_name='api:myrelatedmodel-detail')
id, first_name , last_name, password, username,last_login, is_active, is_active, date_joined and email