首页 > 解决方案 > 如何从确切的故事中获取剧集

问题描述

我有情节,这与带有 url 的故事(外键)有关

router = routers.DefaultRouter()
router.register('', StoryView, basename='stories')
router.register('episodes', EpisodeView, basename='episodes')

看法:

class EpisodeView(viewsets.ModelViewSet):

楷模:

class Story(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField(max_length=255)
    cover = models.ImageField(upload_to=upload_location)
    genre = models.ManyToManyField(Genre)
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)


class Episode(models.Model):
    title = models.CharField(max_length=255)
    cover = models.ImageField(upload_to=upload_location)
    story = models.ForeignKey(Story, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    episode_number = models.IntegerField(null=True)

我需要获取故事情节。这种情况怎么办?

标签: pythondjangodjango-rest-framework

解决方案


您必须添加路由器才能获取剧集 ID

router = routers.DefaultRouter()
router.register('', StoryView, basename='stories')
router.register('episodes', EpisodeView, basename='episodes')
router.register('(?P<story_id>[0-9]+)/episodes', StoryEpisodeView, basename='episodes')

然后为 StoryEpisodeView 编写更新列表方法:

def get_queryset(self):
    return Episode.objects.filter(story_id=self.story_id)

def list(self, request, *args, **kwargs):
    self.story_id = kwargs.get(story_id)
    super(request, *args, **kwargs)

推荐阅读