Django rest framework 如何使用django rest框架基于嵌套数据筛选记录

Django rest framework 如何使用django rest框架基于嵌套数据筛选记录,django-rest-framework,Django Rest Framework,我从基于django rest框架的客户api得到了这个json响应 当我点击api时 我收到以下答复 [ { 'name': 'Daniel', 'group': 'BK', 'user_id': 102, 'user_details': { 'username': 'dan1', 'active': true, } }, { 'name': 'John', 'group': 'BK', '

我从基于django rest框架的客户api得到了这个json响应

当我点击api时

我收到以下答复

[
 {
    '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的记录,我该怎么做

我已经尝试在我的客户视图集中通过定义过滤器后端来使用它

筛选器\字段=('user\ u details\ u username',)

并尝试将api作为

但它也给出了错误

“Meta.fields”包含未在此筛选器集上定义的字段: 用户\详细信息\用户名

之所以会发生这种情况,是因为user_details不是my customer serializer的字段,它基本上是SerializerMethodField,用于处理用户信息以在customer 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
这是我的视图集

class CustomerViewSet(viewsets.ModelViewSet):
   queryset = Customer.objects.all()
   serializer_class = CustomerSerializer
   filter_fields = ('user_details__username',)

请帮助我如何从username=john1的客户api中筛选记录您不应该使用
SerializerMethodField

请尝试下面的序列化程序:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('username', 'active',)


class CustomerSerializer(serializers.ModelSerializer):
    user_details = UserSerializer(many=True)

    class Meta:
        model = Customer
        fields = '__all__'
然后您可以将字段定义为
filter\u fields=('user\u details\u username',)