当前位置: 首页 > 面试题库 >

在Django中,您可以向查询集添加方法吗?

党宇定
2023-03-14
问题内容

在Django中,如果我有模型类,例如

from django.db import models

class Transaction(models.Model):
    ...

然后,如果我想向模型添加方法以存储例如相当复杂的过滤器,则可以添加自定义模型管理器,例如

class TransactionManager(models.Manager):

    def reasonably_complex_filter(self):
        return self.get_query_set().filter(...)


class Transaction(models.Model):
    objects = TransactionManager()

然后我可以做:

>>> Transaction.objects.reasonably_complex_filter()

有什么方法可以添加可链接到模型的查询集末尾的自定义方法?

即以一种我可以做到的方式添加自定义方法:

>>> Transaction.objects.filter(...).reasonably_complex_filter()

问题答案:

您需要向QuerySet最终添加的方法添加方法。因此,您需要创建和使用一个QuerySet子类,该子类具有在需要此功能的位置定义的方法。

我找到了本教程,该教程说明了如何执行此操作以及您可能要执行以下操作的原因:

http://adam.gomaa.us/blog/2009/feb/16/subclassing-django-
querysets/index.html



 类似资料:
  • 问题内容: 我想通过使用Postgresql的“ NULLS LAST”选项对模型进行排序。怎么做? 我尝试了类似的东西 但是我明白了 “无法将关键字’NULLS LAST’解析为字段” 问题答案: 此功能已添加到Django 1.11中。 https://docs.djangoproject.com/en/dev/releases/1.11/

  • 问题内容: 有没有一种方法可以为查询对象创建自定义方法,以便您可以执行以下操作? 本质上在哪里 并能够过滤掉它吗? 问题答案: 您可以对基类进行子类化以添加自己的方法: 然后,您可以在创建会话时告诉SQLAlchemy使用此新查询类(此处的文档)。从您的代码看来,您可能正在使用Flask- SQLAlchemy,因此您可以按照以下步骤进行操作: 否则,您将参数直接传递给: 到目前为止,这个新的查询

  • 问题内容: 你可以添加新的语句(例如,,)Python的语法? 说,允许 要么, 如果您 应该的话 ,不要太多,但如果可能的话,就可以了(只需修改python解释器代码即可) 问题答案: 您可能会发现这很有用-Python内部:在Python上添加新语句,引用如下: 本文旨在更好地了解Python前端的工作方式。仅仅阅读文档和源代码可能会有点无聊,因此我在这里采用动手实践的方法:我将向Python

  • 问题内容: 我有点困惑如何使用在Django的。例如,一个对象Blog ,以及与该对象相关的attribute entry_set。是什么意思? 如果有人可以使用此示例显示可能的输出,我将不胜感激。 问题答案: 你看到的是反向相关的对象查找。 在你的示例中: 现在,给定类型为的对象,你将可以访问相关对象-这是一个正向关系。该是一个反向查找类变量的Django为你看跌期权。 因此,给定对象-你将执行

  • 问题内容: 我正在努力实现以下目标: 我有一个ORDER BY语句,该语句可能会根据列A中存储的值而有所不同。 例如: 如果类型是成员,则按成员姓氏排序;如果类型是组,则按组名字排序 两者均以升序排列。 我对最终声明的最佳猜测是: 我知道这是错误的,但无法在其他地方找到信息。有任何想法吗? 问题答案: 好了,您可以在MySQL中使用该 函数 (请注意,因为还有一个不相关的语句,所以要重点说明)…:

  • 问题内容: 我们有一个测试套件,主要使用带有Hamcrest匹配器的JUnit断言。我们的一个团队开始对AssertJ进行实验,并以其语法,灵活性和声明性给人留下了深刻的印象。JUnit提供的一项功能是我无法在AssertJ中找到与之等效的功能:添加自定义断言失败消息。 我们经常在比较不是为了人类可读性而制成的对象,这些对象将具有随机查找的Id或UUID,并且无法通过包含的数据来判断它们应该是什么