У меня есть ответ json от моего клиента api на основе рамки django rest.Как фильтровать записи на основе вложенных данных с помощью рамки django rest
Когда я ударил апи
я получать следующий ответ
[
{
'name': 'Daniel',
'group': 'BK',
'user_id': 102,
'user_details': {
'username': 'dan1',
'active': true,
}
},
{
'name': 'John',
'group': 'BK',
'user_id': 103,
'user_details': {
'username': 'john1',
'active': true,
}
}
]
Теперь мне нужно фильтровать записи которого имя пользователя = John1, как я могу это сделать?
Я попытался использовать это в моем клиентов режима просмотра путем определения фильтра бэкенд
filter_fields = ('user_details__username',)
и попытался ударяя апи как
http://localhost:8000/api/customers?user_details__username=john1
, но он дает ошибку как
«Meta.fields» содержит поля, которые не определены в этом FilterSet: user_details__username
Сво происходит потому, что user_details не поле моего клиента сериализатором, его в основном SerializerMethodField, который манипулирует информацией пользователя для отображения под клиентом api.
Вот мой клиент сериализатору
class CustomerSerializer(serializers.HyperlinkedModelSerializer):
user_details = serializers.SerializerMethodField('get_serialized_target_object')
class Meta:
model = Customer
fields = '__all__'
def get_serialized_target_object(self, obj):
usr_id = obj.user_id
if usr_id:
instance = User.objects.filter(pk=usr_id)
if instance:
instance = instance[0]
return UserSerializer(instance=instance).data
else:
return None
и вот мой Viewset
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
filter_fields = ('user_details__username',)
Пожалуйста, помогите мне, как я могу фильтровать мои записи из апи клиента с именем пользователя = John1