【问题标题】:Django Rest Framework Nested Routes - PK alternativesDjango Rest Framework 嵌套路由 - PK 替代方案
【发布时间】:2017-03-23 21:31:02
【问题描述】:

我正在使用 drf-nested-routers 来嵌套我的资源,并且一切正常。但是,我想使用 pk 以外的东西来引用父对象。

我目前拥有的是:

api/movies/4/scenes - 从 pk=4 的电影中生成场景列表。

我想要的是:

api/movies/ghost-busters/scenes - 标识符是movie.title而不是movie.pk

有什么建议吗?

谢谢

【问题讨论】:

  • 为你的班级设置look_up_field
  • 有一个很好的答案here。简而言之:在你的模型中创建一个 slug 字段,在你的 ModelViewSet 中添加一个lookup_field ,就是这样。

标签: django drf-nested-routers


【解决方案1】:

您可以将 slug 用于您想要制作“api/movies/ghost-busters/scenes”的网址

首先,您必须使用 slugField 制作模型,例如。

class Blog(models.Model):
    qoute = models.CharField(max_length=30)
    slug = models.SlugField()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.qoute)
        super(Blog, self).save(*args, **kwargs)

在保存模型期间,它将通过“qoute”创建一个 slug 并保存到“slug”列

让您的 urls.py 条目

url(r'^api/movies/(?P<slug>[\w-]+)/scenes/$', 'myapp.views.blog_detail', name='blog_detail'),

然后对于您在serializer 中设置lookup_field 的drf 并查看。 N.B: you can user ModelSerializer or Serializer or HyperlinkSerialzer as you wish..

class BlogSerializer(serializers.ModelSerializer):

    class Meta:
        model = Blog
        fields = ('quote', 'slug',)
        lookup_field = 'slug'

和意见..

class blog_detail(generics.RetrieveUpdateDestroyAPIView):

    queryset = Blog.objects.all()
    serializer_class = BlogSerializer
    lookup_field = 'slug'

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2023-03-15
    • 1970-01-01
    • 2011-10-10
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多