Фильтр по внешним ключам в таблицах данных Django-Rest

У меня есть datatable для Order модели, которая содержит некоторые поля из User модели и реализована с помощью сериализатора следующим образом

serializers.py

# customer order detail serializer
class CustomerOrderSerializer(serializers.ModelSerializer):
    first_name = serializers.ReadOnlyField(source='user.first_name')
    last_name = serializers.ReadOnlyField(source='user.last_name')

    def __init__(self, *args, **kwargs):
        remove_fields = kwargs.pop('remove_fields', None)
        super(CustomerOrderSerializer, self).__init__(*args, **kwargs)

        if remove_fields:
            for field_name in remove_fields:
                self.fields.pop(field_name)

    class Meta:
        model = Order
        fields = ['id', 'amount', 'order_status', 'created', 'first_name', 'last_name']
        read_only_fields = ['issue_date', 'first_name', 'last_name']

В views.py

class OrderList(generics.ListAPIView):
    queryset = Order.objects.order_by('-created')
    serializer_class = CustomerOrderSerializer

Мне успешно удается получить first_name & last_name поля в формате datatable, как показано

enter image description here

Однако, мои требования заключаются в фильтрации/поиске в таблице данных по полям first_name & last_name которые находятся в разных моделях User

Когда я пытаюсь фильтровать по этим полям, я получаю Следующую ошибку :

Cannot resolve keyword 'first_name' into field. Choices are: ..., .., ..., .. 

Может ли кто-нибудь помочь мне понять, Как мы можем фильтровать по полям внешнего ключа в таблицах данных django-rest

Вы можете использовать SearchFilter.doc

from rest_framework import filters

class OrderList(generics.ListAPIView):
    queryset = Order.objects.order_by('-created')
    serializer_class = CustomerOrderSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['user__first_name', 'user__last_name']

После этого, вы можете искать имя и фамилию по параметру запроса ?search=foo.

Вернуться на верх