python - 如何在 Django Rest Framework 中通过 URL 过滤嵌套列表

标签 python django django-rest-framework

我有一个类(class)模型,并且在其中我有一个类别列表......我希望能够过滤类别 这是我的序列化器

class CourseSerial(serializers.ModelSerializer):
    categories =  serializers.SerializerMethodField(read_only=True)
    image = VersatileImageFieldSerializer(
        sizes=[
            ('full_size', 'url'),
            ('thumbnail', 'thumbnail__100x100'),
            ('medium_square_crop', 'crop__400x400'),
            ('small_square_crop', 'crop__50x50')
        ]
    )
    class Meta:
        model = Course
        fields = ('id','name_a','name_e','short_desc_a', 'short_desc_e','image','categories') 

    def get_categories(self, obj):
          cats = CourseCategories.objects.filter(course=obj.id)
          return CourseCategoriesSerial(cats,many=True).

class CourseCategoriesSerial(serializers.ModelSerializer):
    class Meta:
        model = CourseCategories
        fields = '__all__'

这是结果

            "active": 1,
            "creation_date": "2018-02-24",
            "creation_user": 1,
            "categories": [
                {
                    "id": 1,
                    "active": 1,
                    "creation_date": "2018-02-24",
                    "course": 1,
                    "category": 140,
                    "subcategory": 159,
                    "creation_user": 1
                },

我有一个类(class)类别模型,它嵌套在类(class)序列化器中...我的 models.py 如下所示:

class Course(models.Model):

    name_a = models.CharField(max_length=100)
    name_e = models.CharField(max_length=100)
    active = models.IntegerField(blank=True, null=True)
    creation_date = models.DateField(blank=True, null=True)
    creation_user = models.ForeignKey('User', models.DO_NOTHING, db_column='creation_user')

    class Meta:
        managed = True
        db_table = 'course'


class CourseCategories(models.Model):
    course = models.ForeignKey(Course, models.DO_NOTHING)
    category = models.ForeignKey('Lookups', models.DO_NOTHING,related_name='course_category')
    subcategory = models.ForeignKey('Lookups', models.DO_NOTHING,related_name='course_sub_category')
    active = models.IntegerField(blank=True, null=True)
    creation_date = models.DateField(blank=True, null=True

    class Meta:
        managed = True
        db_table = 'course_categories'

我希望能够过滤嵌套列表、URL 过滤器..例如 api/course/?categories__category=140

这是我的观点:

class CourseApiView(generics.GenericAPIView,
                    mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin):
    queryset = Course.objects.all()
    serializer_class = CourseSerial
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    ordering_fields = ('id','popularity','offered','creation_date')
    filter_fields = ('id','name_a','name_e','short_desc_a', 'short_desc_e','level','price','currency','start_date','end_date','details','language','location','priority','status','visible','image','total_rating','total_raters','popularity','offered','offer_value','active','creation_date','creation_user')
    lookup_field = 'id'
    pagination_class = LargeResultsSetPagination

最佳答案

您可以使用以下任何软件包,

1. django-url-filter

2. django-filter

我认为,第一个更适合您的要求。 Follow the instructions你会得到你正在寻找的东西

关于python - 如何在 Django Rest Framework 中通过 URL 过滤嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412849/

相关文章:

python - Pandas OLS 的替代方案

python - 并排打印两个函数

python - 我如何以编程方式注销用户?[Django]

python - 我正在尝试使用 Django Rest 框架创建基于微服务的架构

python - DRF-通过模型在 M2M 中创建新实例时出错

python - 获取 K 组 N 成员和 L 组 M 成员的组合列表

python - 递归压平列表,跟踪递归深度

Django 1.11 我们可以在来自两个不同数据库的表之间创建关系吗?

Django,如何以自定义形式使用管理自动填充字段

python - Django 。当我们登录时,我们如何自动从 AnonymousUser 转移到 AbstractBaseUser