首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用drf嵌套路由器的嵌套超链接的视图名称不正确

使用drf嵌套路由器的嵌套超链接的视图名称不正确
EN

Stack Overflow用户
提问于 2021-01-14 01:48:02
回答 1查看 77关注 0票数 0

我正在尝试使用drf-nested-routers创建一个简单的嵌套Django REST API,给定以下模型:

代码语言:javascript
复制
# models.py
class Podcast(models.Model):
    title = models.CharField(max_length=125)

class Episode(models.Model):
    podcast = models.ForeignKey(Podcast, on_delete=models.CASCADE)
    title = models.CharField(max_length=125)

基于readme domains/nameservers example,我定义了以下路由器,预期的URL结构如下:

代码语言:javascript
复制
/podcasts[/{podcast_pk}[/episodes[/{episode_pk}]]]
代码语言:javascript
复制
# urls.py
router = routers.DefaultRouter()
router.register(r'podcasts', PodcastViewSet)

episode_router = routers.NestedDefaultRouter(
    router, r'podcasts', lookup='podcast'
)
episode_router.register(
    r'episodes', EpisodeViewSet, basename='podcast-episodes'
)
代码语言:javascript
复制
# serializers.py
class PodcastSerializer(HyperlinkedModelSerializer):
    episodes = HyperlinkedIdentityField(
        view_name='podcast-episodes-list',
        lookup_url_kwarg='podcast_pk'
    )

    class Meta:
        model = Podcast
        fields = '__all__'

class EpisodeSerializer(NestedHyperlinkedModelSerializer):
    parent_lookup_kwargs = {
        'podcast_pk': 'podcast__pk',
    }

    class Meta:
        model = Episode
        fields = '__all__'
        # exclude = ('url',) # works without reference to self
代码语言:javascript
复制
# views.py
class PodcastViewSet(viewsets.ModelViewSet):
    queryset = Podcast.objects.all()
    serializer_class = PodcastSerializer

class EpisodeViewSet(viewsets.ModelViewSet):
    serializer_class = EpisodeSerializer

    def get_queryset(self):
        return Episode.objects.filter(
            podcast=self.kwargs['podcast_pk'],
        )

如果包含url,则访问/podcasts/1/episodes/会引发以下错误:

代码语言:javascript
复制
Exception Type: ImproperlyConfigured at /podcasts/1/episodes/
Exception Value: Could not resolve URL for hyperlinked 
relationship using view name "episode-detail". You may 
have failed to include the related model in your API, 
or incorrectly configured the `lookup_field` attribute 
on this field.

为什么它不能识别正确的视图名称,或者是否还有其他明显的我遗漏的东西

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 20:34:51

在我的例子中,使用'id‘而不是'pk’解决了我的问题。

代码语言:javascript
复制
parent_lookup_kwargs = {
    'podcast_pk': 'podcast_id',
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65707175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档