繁体   English   中英

如何在Python中创建混合模式

[英]How to create a mixin pattern in Python

我正在尝试使用以下示例理解mixins的概念:

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

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

我想创建一个mixin,它通过添加检查用户拥有对象并仅显示这些项目的方式,来增强(覆盖类get_queryset类)任何自定义序列化程序...

def get_queryset(self):
        """
        This view should return a list of all the items
        for the currently authenticated user.
        """
        user = self.request.user
        return ???????.objects.filter(user=user)

所以我的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)正确的对象return [OBJECT].objects.filter(user=user) ,这种方法行得通吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM