如何在Python中创建mixin模式

2024-05-08 03:03:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过下面的例子来理解mixin的概念:

我有一个使用DRF的简单序列化程序:

class TestSerializer(serializers.ModelSerializer):
    class Meta:
        model = Test
        fields = ('url', 'name', 'user')

我想创建一个mixin,它通过添加一个检查来增强(覆盖类get_queryset)任何自定义序列化程序,例如用户拥有对象并且只显示这些项。。。在

^{pr2}$

所以我的TestSerializer将如下所示:

class TestSerializer(serializers.ModelSerializer, UserListMixin):
    etc

和UserListMixin:

class UserListMixin(object):
    """
    Filtering based on the value of request.user.
    """

    def get_queryset(self, *args, **kwargs):
        """
        This view should return a list of all the purchases
        for the currently authenticated user.
        """
        user = self.request.user
        return super([?????????], self).get_queryset(*args, **kwargs).filter(user=user)

我遇到的困难是创建UserListMixin类。如何根据扩展的内容返回正确的对象return [OBJECT].objects.filter(user=user),这种方法是否有效?在


Tags: the对象self程序getreturn序列化mixin
1条回答
网友
1楼 · 发布于 2024-05-08 03:03:37

过滤器是可链接的,因此这里最好的做法是调用super方法来获取默认的queryset,然后在顶部添加过滤器:

def get_queryset(self, *args, **kwargs)
    user = self.request.user
    return super(UserListMixin, self).get_queryset(*args, **kwargs).filter(user=user)

相关问题 更多 >