Django rest framework 如何使用django rest框架基于嵌套数据筛选记录
我从基于django rest框架的客户api得到了这个json响应 当我点击api时 我收到以下答复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', '
[
{
'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',)