Фильтр по внешним ключам в таблицах данных 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, как показано
Однако, мои требования заключаются в фильтрации/поиске в таблице данных по полям 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.
