如何以编程方式向DRF 3中的PrimaryKeyRelatedField提供“ queryset” [英] How to programmatically provide `queryset` to PrimaryKeyRelatedField in DRF 3

查看:86
本文介绍了如何以编程方式向DRF 3中的PrimaryKeyRelatedField提供“ queryset”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要拥有非只读的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆