关键词:
【中文标题】无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL【英文标题】:Could not resolve URL for hyperlinked relationship using view name ( django-rest-framework ) 【发布时间】:2018-06-29 19:50:26 【问题描述】:问题:
我收到这样的错误。
在 /api/users/ 处配置不正确
无法使用视图名称解析超链接关系的 URL “用户详细信息”。您可能未能将相关模型包含在 您的 API,或者错误地配置了
lookup_field
属性 这个字段。
我读过这个post,但它没有用。
serializers.py
>class UserSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='user-detail',
lookup_field='profile')
class Meta:
model = User
fields = ('id', 'username', 'first_name', 'last_name', 'url')
class UserProfileSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
class Meta:
model = UserProfile
fields = "__all__"
# user = serializers.ReadOnlyField(source='owner.username')
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
urls.py
>user_profile_list = UserProfileViewSet.as_view(
'get': 'list',
'post': 'create'
)
user_profile_detail = UserProfileViewSet.as_view(
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
)
user_list = UserViewSet.as_view(
'get': 'list'
)
user_detail = UserViewSet.as_view(
'get': 'retrieve'
)
user_profiles_detail = UserViewSet.as_view(
'get': 'profile'
)
router = DefaultRouter()
router.register(r'userprofiles', views.UserProfileViewSet)
router.register(r'users', views.UserViewSet)
urlpatterns = [
url(r'^', include(router.urls))
]
views.py
>class UserProfileViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
pagination_class = LimitTenPagination
@detail_route(renderer_classes=[renderers.JSONRenderer])
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
This viewset automatically provides `list` and `detail` actions
"""
queryset = User.objects.all()
serializer_class = UserSerializer
来自我的 models.py 的片段
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
我尝试了什么:
我尝试将user-detail
更改为api:user-detail
(是的api
命名空间确实存在于主urls.py 文件中)
【问题讨论】:
我知道您希望在User
序列化程序中有一个字段指向其配置文件的 URL,对吗?
您是想让 url 指向用户详细信息视图还是用户个人资料详细信息视图?
@JessamynSmith 我正试图将其提供给用户详细信息,这就是为什么我选择model
作为User
而不是UserProfile
@dukebody 是的,就是这样
【参考方案1】:
看文档,我相信你必须使用HyperLinkedRelatedField
。另请参阅this related SO post。
您在序列化器字段定义中混淆了参数。我认为应该是:
class UserSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedRelatedField(view_name='api:userprofile-detail',
source='profile')
编辑:
添加namespace
api
【讨论】:
我发现这只有在我将字段命名为与模型中相同时才有效,例如:profile = serializers.HyperlinkedRelatedField(read_only=True, view_name='userprofiles-detail') @JessamynSmith 是的,这就是为什么需要添加命名空间【参考方案2】:从您的HyperlinkedIdentityField
中删除lookup_filed
属性,因为您不需要它。
因此您的 serializer
类应该如下所示:
class UserSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='user-detail', source='profile',)
class Meta:
model = User
fields = ('id', 'username', 'first_name', 'last_name', 'url')
属性lookup_filed
仅在引用使用relationship-field/attribute
作为主键而不是默认autoincrement
的模型类时才需要。例如,如果您的模型类如下所示,则可以使用它:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile', primary_key=True)
【讨论】:
【参考方案3】:如果您正在扩展 GenericViewSet 和 ListModelMixin 类,并且在列表视图中添加 url 字段时遇到相同的错误,那是因为您没有定义详细视图。确保您正在扩展 RetrieveModelMixin mixin:
class UserViewSet (mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
感谢 Rowinson Gallego 的回答
【讨论】:
无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL
】无法使用视图名称(django-rest-framework)解析超链接关系的URL【英文标题】:CouldnotresolveURLforhyperlinkedrelationshipusingviewname(django-rest-framework)【发布时间】:2018-06-2919:50:26【问题描述】:问题:我收到这样的错误。在/api/users/处配置不... 查看详情
django.core.exceptions.ImproperlyConfigured:无法使用视图名称“用户详细信息”解析超链接关系的 URL
】django.core.exceptions.ImproperlyConfigured:无法使用视图名称“用户详细信息”解析超链接关系的URL【英文标题】:django.core.exceptions.ImproperlyConfigured:CouldnotresolveURLforhyperlinkedrelationshipusingviewname"user-detail"【发布时间】:2017-02-25 查看详情
无法在 Spring Boot 中解析名称为“index”的视图
】无法在SpringBoot中解析名称为“index”的视图【英文标题】:Couldnotresolveviewwithname\'index\'inSpringBoot【发布时间】:2020-12-1102:53:18【问题描述】:春季启动:2.3.3.RELEASEJava:11我使用webflux+RouterFunction+Thymeleaf并遇到错误“无法解析名... 查看详情
无法导入名称视图
】无法导入名称视图【英文标题】:Cannotimportnameviews【发布时间】:2014-11-1515:10:53【问题描述】:ImportErrorat/cannotimportnameviewsRequestMethod:GETRequestURL:http://127.0.0.1:8000/DjangoVersion:1.7ExceptionType:ImportErrorExceptionValue:cannotimp 查看详情
圣杯。无法解析名称为“grailsDispatcherServlet”的 servlet 中名称为“index”的视图
】圣杯。无法解析名称为“grailsDispatcherServlet”的servlet中名称为“index”的视图【英文标题】:Grails.Couldnotresolveviewwithname\'index\'inservletwithname\'grailsDispatcherServlet\'【发布时间】:2015-08-0610:08:09【问题描述】:我开始使用Grails(3.x)... 查看详情
Django 无法导入名称视图
】Django无法导入名称视图【英文标题】:DjangoCannotimportnameviews【发布时间】:2013-10-0320:04:56【问题描述】:所以我试图通过在DjangoProject上做“第一个Django应用程序”的事情来加快Django的副项目,但是当我第一次尝试设置视图时... 查看详情
无法在视图中显示名称列表
】无法在视图中显示名称列表【英文标题】:Cannotdisplaythelistofnamesintotheview【发布时间】:2018-09-1917:47:59【问题描述】:我有一个在ViewModel中准备的列表,用于从数据库表中获取值。分配给模型类的列表:publicclassDTypepublicstringDTN... 查看详情
无法在情节提要的容器视图中添加 textview 名称
】无法在情节提要的容器视图中添加textview名称【英文标题】:Can\'taddtextviewnameinsideacontainerviewinstoryboard【发布时间】:2018-01-0709:41:15【问题描述】:我在视图上添加了一个容器视图,并在其中添加了一个文本视图。该应用程序... 查看详情
无法使用函数从一个视图访问另一个视图的变量?
】无法使用函数从一个视图访问另一个视图的变量?【英文标题】:Unabletoaccessavariablefromoneviewtoanotherviewusingfunctions?【发布时间】:2016-05-1315:51:45【问题描述】:我在Django中编写了一个注册表单。我正在尝试将成功注册的用户的... 查看详情
从 url 中删除 joomla 视图名称和组件名称
...?我在router.php文件中的BuildRoute方法中使用此代码,但我无法删除视图名称:if(isset($query[\'view\']))$segments[]=$query[ 查看详情
无法将数组名称传递到 Swift 3 中的表视图中
】无法将数组名称传递到Swift3中的表视图中【英文标题】:NotabletopassarraynameintotableviewinSwift3【发布时间】:2016-12-2906:29:09【问题描述】:我对swift代码比较陌生。无法将plist中的数组文本传递到表格视图中...现在我在模拟器中得... 查看详情
javax.servlet.ServletException:无法在名称为“NA-dispatcher”的 servlet 中解析名称为“login”的视图
】javax.servlet.ServletException:无法在名称为“NA-dispatcher”的servlet中解析名称为“login”的视图【英文标题】:javax.servlet.ServletException:Couldnotresolveviewwithname\'login\'inservletwithname\'NA-dispatcher\'【发布时间】:2019-07-1608:40:46【问题描述】... 查看详情
HTML 模板确实存在(base.html),Pycharm 解释器无法从我的应用名称 = 'app' 导入视图
】HTML模板确实存在(base.html),Pycharm解释器无法从我的应用名称=\\\'app\\\'导入视图【英文标题】:HTMLtemplatedoesonexist(base.html),Pycharminterpreterisunabletoimportviewsfrommyappname=\'app\'HTML模板确实存在(base.html),Pycharm解释器无法从我的应... 查看详情
表视图单元格 - UITableView - 无法在详细视图中显示多行
】表视图单元格-UITableView-无法在详细视图中显示多行【英文标题】:TableViewCell-UITableView-Cannotshowmultiplerowsindetailedview【发布时间】:2015-09-0509:21:59【问题描述】:我正在使用Tableview来显示来自recipesArray的Name,效果很好,并在来... 查看详情
Grails 3 + Tomcat 8:无法解析名称为“grailsDispatcherServlet”的 servlet 中名称为“/login/authAjax”的视图
】Grails3+Tomcat8:无法解析名称为“grailsDispatcherServlet”的servlet中名称为“/login/authAjax”的视图【英文标题】:Grails3+Tomcat8:Couldnotresolveviewwithname\'/login/authAjax\'inservletwithname\'grailsDispatcherServlet\'【发布时间】:2016-08-2010:09:05【 查看详情
未指定 base_name 参数,并且无法从视图集中自动确定名称,因为它没有 .queryset 属性
】未指定base_name参数,并且无法从视图集中自动确定名称,因为它没有.queryset属性【英文标题】:base_nameargumentnotspecified,andcouldnotautomaticallydeterminethenamefromtheviewset,asitdoesnothavea.querysetattribute【发布时间】:2018-07-1022:39:40【问题描... 查看详情
使用通用登录视图时出现“名称'django'未定义”错误?
】使用通用登录视图时出现“名称\\\'django\\\'未定义”错误?【英文标题】:"name\'django\'notdefined"errorwhenusingthegenericloginview?使用通用登录视图时出现“名称\'django\'未定义”错误?【发布时间】:2014-01-3100:20:04【问题描述... 查看详情
Java、Spring、Apache Tiles 错误:无法解析名称为“dispatcher”的 servlet 中名称为“index”的视图
】Java、Spring、ApacheTiles错误:无法解析名称为“dispatcher”的servlet中名称为“index”的视图【英文标题】:Java,Spring,ApacheTileserror:Couldnotresolveviewwithname\'index\'inservletwithname\'dispatcher\'【发布时间】:2014-05-0316:36:06【问题描述】:我... 查看详情