python - 用于获取查询的模型管理器和模型方法

标签 python django model django-managers

我有一个模范客户。我还有一个模型管理器,并且我添加了一个具有某些方法的类QuerySetadd_meta()

当我使用 Customers.objects.filter().add_meta() 时,我倾向于获取每个实例的所有元信息。 但是当我使用 Customer.objects.get(pk=1) 时,我无法使用该 meta_data() 方法。

这是我的代码。

可重用管理器

class CustomerManager(models.Manager):
    """A re-usable Manager to access a custom QuerySet"""

    def __getattr__(self, attr, *args):
        try:
            return getattr(self.__class__, attr, *args)
        except AttributeError:
            return getattr(self.get_query_set(), attr, *args)

    def get_query_set(self):
        return self.model.QuerySet(self.model)

模型

class Project(models.Model):
    objects = ProjectManager()

    class QuerySet(QuerySet):

        def add_meta(self):
            return self.extra(
                select={"priority": "COALESCE(bm_rank, sales_rank, created_at)",
                        "size": "order_size_price*order_size_weight",
                        "revenue": "current_selling_price*order_size_weight"
                },
                order_by=["priority"])

尝试了以下方法

Project.objects.filter(pk=5).add_meta().get().size

这不起作用

Project.objects.get(pk=5).add_meta()

任何人都可以知道我如何仍然可以将 add_meta 与 get 和此现有代码一起使用。

最佳答案

您可以简单地向模型类添加属性,因为您的元信息仅涉及一些简单的计算:

class Project(models.Model):
    # your fields....


    @property
    def size(self):
        return self.order_size_price * self.order_size_weight


# now this should work for every Project instance:
project = Project.objects.get(pk=1)
print project.size

如果您需要对这些“计算的”属性进行一些过滤,您仍然可以使用额外的选择...

关于python - 用于获取查询的模型管理器和模型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830651/

相关文章:

python - 我收到语法错误,但不确定原因

python - Django 教程第 4 部分中的 NoReverseMatch 错误

python - 如何在django中查询多列

python - 如何在 Django REST Framework 中序列化与自身的递归关系?

ruby-on-rails - 错误率: STI/MTI/Mixin confusion

python - 想要在spark python中将字符串值转换为 float

python - 在 ironpython 中导入模块时会发生什么?

python - unix 实时 vs python process_time()

python - Django : get model instance with dynamic variable name and value

python - Django 模型字段如何与多个模型相关?