【问题标题】:Django QuerySet class attributesDjango QuerySet 类属性
【发布时间】:2017-05-02 15:27:19
【问题描述】:

这个问题get class name for empty queryset in django 举例说明了Django 中的QuerySet 具有model 属性

QuerySet API documentation 列出了方法,但我找不到列出其属性的地方

有没有办法找回它们,或者我在文档中找不到它们的位置?

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    它似乎是必要的,这并不好,但是在说明类定义是什么样子的行旁边有一个“源”链接。这导致了它的__init__ 方法:

    def __init__(self, model=None, query=None, using=None, hints=None):
        self.model = model
        self._db = using
        self._hints = hints or {}
        self.query = query or sql.Query(self.model)
        self._result_cache = None
        self._sticky_filter = False
        self._for_write = False
        self._prefetch_related_lookups = []
        self._prefetch_done = False
        self._known_related_objects = {}  # {rel_field, {pk: rel_obj}}
        self._iterable_class = ModelIterable
        self._fields = None
    

    从这里我们可以看到self.modelself.query 存在,但其他都是私有的,你不应该使用它们。

    进一步滚动,还有属性queryset.db,如果现在运行查询,将使用该数据库。

    【讨论】:

    • “不好”你的意思是 API 应该列出属性还是我的问题只是缺乏关注?
    • 根据 Django 的API stability policy,任何未记录的内容都不是公共 API 的一部分,Django 保留以向后不兼容的方式更改代码的权利。 modelquery 等属性是实现细节,而不是公共 API。虽然这两个属性一直存在,我怀疑它们会以任何破坏性的方式改变,但请记住这一点。
    • @Mojimi:我的意思是理想情况下这样的事情会被记录下来,而您不需要查看代码。但正如 knbk 所说,这不是官方支持的 API。
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2021-08-05
    • 2017-06-22
    • 2013-05-10
    • 1970-01-01
    • 2011-12-14
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多