基本上,我想通过过滤从ModelSerializer的相关字段中剔除不活跃的用户.我试了Dynamically limiting queryset of related field种,也试了以下几种:

class MySerializer(serializers.ModelSerializer):
  users = serializers.PrimaryKeyRelatedField(queryset=User.objects.filter(active=True), many=True)
  class Meta:
    model = MyModel
    fields = ('users',)

这两种方法都不能仅过滤查询集.我想将嵌套的相关序列化程序类作为字段进行此操作(但甚至无法将其与RelatedField一起使用).

如何对嵌套关系使用过滤查询集?

推荐答案

我也很好奇能不能找到更好的解决方案.我在序列化程序中使用了一个自定义方法来实现这一点.它有点冗长,但至少是明确的.

一些伪代码,其中GarageSerializer将过滤CARS的嵌套关系:

class MyGarageSerializer(...):
    users = serializers.SerializerMethodField('get_cars')

    def get_cars(self, garage):
        cars_queryset = Car.objects.all().filter(Q(garage=garage) | ...).select_related()
        serializer = CarSerializer(instance=cars_queryset, many=True, context=self.context)

        return serializer.data

显然,将查询集替换为您想要的任何内容.您并不总是需要提供上下文(我使用它来检索嵌套序列化程序中的一些查询参数),并且您可能不需要.select_related(这是一个优化).

Django相关问答推荐

使用自定义模型注册后,Django无法登录

无法将关键字average_rating解析为字段

Django Admin:在一个部分中同时显示多个应用程序?

一次请求中更新整个Django模型

有没有办法在Django中按需/点击仅获取和序列化一部分数据以提高性能?

如何将多个模型添加到单个列表视图?

如何在没有此前缀的情况下修复此 django 路径?

Django:使用相同的外键在不同的应用程序中 Select 多个列

Playframework 和 Django

如何缓存 Django Rest Framework API 调用?

Django 基于角色的视图?

django npm 和 node 包架构

Django:如何在视图中获取格式日期?

Python:获取异常的错误消息

has_object_permission 和 has_permission 有什么区别?

使用直通模型了解 Django 中的多对多字段

如何在不发送信号的情况下保存模型?

django - 使用 get_or_create 自动创建用户时设置用户权限

Numpy 数组到 base64 并返回到 Numpy 数组 - Python

如何使用 Django/nginx 部署仅限 HTTPS 的站点?