如何以编程方式向DRF 3中的PrimaryKeyRelatedField提供“ queryset” [英] How to programmatically provide `queryset` to PrimaryKeyRelatedField in DRF 3
问题描述
要拥有非只读的 PrimaryKeyRelatedField
,您需要提供一个包含有效选项的查询集。
In order to have a non-readonly PrimaryKeyRelatedField
, you are required to provide a queryset that contains valid options.
如何根据当前请求(用户)正确填充该查询集?
How can I properly populate that queryset based on the current request (user)?
推荐答案
关键是子类 PrimaryKeyRelatedField
并使用请求上下文中的用户信息重载 get_queryset
方法:
The key is to subclass PrimaryKeyRelatedField
and overload the get_queryset
method, using the user information from the request context:
class UserFilteredPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def get_queryset(self):
request = self.context.get('request', None)
queryset = super(UserFilteredPrimaryKeyRelatedField, self).get_queryset()
if not request or not queryset:
return None
return queryset.filter(user=request.user)
然后您可以像使用(未过滤的)原始文件一样使用此新的序列化程序:
You can then use this new serializer just like the (unfiltered) original:
class MySerializer(serializers.ModelSerializer):
related = UserFilteredPrimaryKeyRelatedField(queryset=MyModel.objects)
无论何时序列化程序访问查询集,都将对其进行过滤,以便仅当前用户拥有的对象返回。
Whenever the serializer accesses the queryset, it will be filtered such that only objects owned by the current user are returned.
这篇关于如何以编程方式向DRF 3中的PrimaryKeyRelatedField提供“ queryset”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!