Подтвердить что ты не робот

Djangorestframework: Фильтрация в связанной области

В принципе, я хочу отфильтровать неактивных пользователей из связанной области ModelSerializer. Я попытался Динамически ограничивать набор запросов связанного поля, а также следующее:

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

Ни один из этих подходов не работал для простой фильтрации набора запросов. Я хочу сделать это для вложенного связанного класса Serializer в качестве поля (но не мог даже заставить его работать с СвязаннымField).

Как фильтровать набор запросов для вложенных отношений?

4b9b3361

Ответ 1

Мне будет интересно увидеть лучшее решение. Для этого я использовал собственный метод в своем сериализаторе. Это немного более подробный, но, по крайней мере, явный.

Некоторые псевдокоды, в которых GarageSerializer будет фильтровать вложенное отношение автомобилей:

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 (это была оптимизация).