使用Django Rest Fram过滤资源和嵌套资源

2024-04-25 20:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种模型:^{cd1>}和^{cd2>}。我想做的是提供一个初始数据视图,以填充主干模型集合,其中只返回有作业的作业类别,对于每个作业类别,所有活动作业。

# models.py
class PopulatedJobCategoryManager(models.Manager):
    def get_queryset(self):
        return super(PopulatedJobCategoryManager,
            self).get_queryset().exclude(title='other', jobs__isnull=True)


class JobCategory(models.Model):
    def __str__(self):
        return self.title

    title = models.CharField(max_length=225)

    objects = models.Manager()
    populated = PopulatedJobCategoryManager()


class ActiveJobManager(models.Manager):
    def get_queryset(self):
        return super(ActiveJobManager, self).get_queryset().filter(
            is_active=True)


class Job(models.Model):
    job_category = ForeignKey(JobCategory, related_name='jobs')
    slug = models.SlugField(max_length=255)
    title = models.CharField(max_length=225)
    . . .
    is_active = models.BooleanField('Active', default=True)

    objects = models.Manager()
    active = ActiveJobManager()


# serializers.py
class JobSerializer(ModelSerializer):
    class Meta:
        model = Job

    def get_queryset(self):
        return Job.active.all()


class JobCategoryFilter(django_filters.FilterSet):
    jobs = django_filters.BooleanFilter(name='jobs', lookup_type='isnull')

    class Meta:
        model = JobCategory
        fields = ['id', 'title', 'jobs']


class JobCategorySerializer(ModelSerializer):
    jobs = JobSerializer(many=True)

    class Meta:
        depth = 1
        model = JobCategory
        fields = ('id', 'title', 'jobs',)
        filter_class = JobCategoryFilter
        ordering_fields = ('order',)

    def get_queryset(self):
        return JobCategory.populated.all()

DjangoRESTFramework似乎根本不想做任何筛选,也不想使用我的模型管理器。我所需的输出伪代码是:

^{pr2}$

我做错什么了?


Tags: 模型selftruegetreturntitlemodelsdef