【发布时间】:2017-06-16 20:37:50
【问题描述】:
我有这个基于 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 的记录,我该怎么做?
我已经尝试通过定义过滤器后端在我的客户视图集中使用它
filter_fields = ('user_details__username',)
并尝试将 api 作为
http://localhost:8000/api/customers?user_details__username=john1
但它给出了错误
'Meta.fields' 包含未在此 FilterSet 上定义的字段: user_details__用户名
它的发生是因为 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
这是我的观点
class CustomerViewSet(viewsets.ModelViewSet):
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
filter_fields = ('user_details__username',)
请帮助我如何使用 username=john1 从客户 api 过滤我的记录
【问题讨论】: