Django 可重用查询集

5 django model django-queryset

我在如下视图中有一个 QuerySet。我希望能够在其他视图中使用相同的查询,但我不想复制和粘贴代码。这也感觉就像我会违反 DRY 原则。

如果我想在以后修改查询,我将不得不在我的所有视图中更改它,这显然不理想。是否有我应该在模型中创建的类或方法可以让我从许多不同的视图调用它?是否有任何关于此的最佳实践?

tasks = Task.objects.filter(user = request.user).order_by('-created_at', 'is_complete')

aem*_*mdy 4

解决方案之一是在模型上创建类方法或扩展模型的管理器。

from django.db import models

  1. 添加类方法

    class MyModel(models.Model):
        @classmethod
        def get_user_tasks(cls, user):
            return cls.objects.filter(...).order_by(...)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 最高管理者

    class MyModelManager(models.Manager):
        def get_user_tasks(self, user):
            return self.filter(...).order_by(...)
    
    class MyModel(models.Model):
        objects = MyModelManager()
    
    # and in the view...
    queryset = MyModel.objects.get_user_tasks(request.user)
    
    Run Code Online (Sandbox Code Playgroud)