问题标签 [django-managers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
397 浏览

django - 自定义管理器对象在 Django 中不起作用?

这是我modelsmanager班级。我认为问题出在PostingFilterManager下面。他们让我搜索关键字的方式titlebody_text错误的。我想在下面查询keywordsintitle和modelbody_text的列表。Postings我没有收到任何错误,但同时浏览器上没有显示任何内容。我确信过滤器应该返回一个帖子。

my view:

0 投票
3 回答
66683 浏览

python - Django ORM - objects.filter() 与 objects.all().filter() - 哪个是首选?

很多时候我看到像这样的结构

这将返回默认 Mananger 的 QuerySet。起初all()似乎相当多余,因为

提供相同的结果。

但是,这似乎只对默认的 Manager 是安全的,因为 Django 文档中有以下两个语句:

摘自“添加额外的管理器方法”一章

自定义 Manager 方法可以返回您想要的任何内容。它不必返回 QuerySet。

all()管理器方法的定义:

all() 返回当前 QuerySet(或 QuerySet 子类)的副本。这在您可能想要传入模型管理器或 QuerySet 并对结果进行进一步过滤的情况下很有用。在对任一对象调用 all() 之后,您肯定会有一个 QuerySet 可以使用。

这对我来说似乎有点矛盾。一方面,Django 提供了让管理器方法返回任何首选对象类型的自由,另一方面它需要该all()方法的 QuerySet。我知道每个经理都有一个get_querysetall(). 但是谁阻止我all()在我的自定义管理器中覆盖?尽管我同意这样做是不好的设计。

  • 据我所知,该all()方法并不能保证返回一个 QuerySet。究竟MyModel.objects返回什么?这句话叫all()吗?或`get_queryset()?

  • 你喜欢MyModel.objects.filter(...)还是MyModel.objects.all().filter(...)。如果是这样,为什么?

  • 你有没有遇到过不可靠的经理,他们会以一种不受欢迎的方式搞乱这些方法?

0 投票
1 回答
1287 浏览

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

我有一个模型customer。我也有一个模型管理器,并且我添加了一个QuerySet具有某些方法的类。add_meta()

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

这是我的代码。

可重用的管理器

模型

尝试了以下

那没用

任何人都可以知道我如何仍然可以使用add_metaget 和这个现有代码。

0 投票
3 回答
10991 浏览

django - Django ORM。加入子查询

我有一个包含一些网站列表的表格和一个包含它们统计信息的表格。

我想查看具体日期的所有网站和统计数据。如果该日期的统计记录不存在,则选择必须仅包含站点。

如果我使用:

我不会得到my_datestats表中没有记录的网站。因为在这种情况下,SQL 查询将如下所示:

查询条件将排除具有 NULL 日期的记录,并且没有统计信息的站点将不包括在选择中。

在我的情况下,我需要加入统计表,该表已经按日期过滤:

如何将此查询转换为 Django ORM?

谢谢。

0 投票
2 回答
151 浏览

django - 验证自定义管理器方法中的输入?

假设我正在创建一个投票应用程序,我希望用户一起创建他们的投票和他们的选择,而不是在以后修改它们。

目前我有类似的东西:

但是,如果Poll.objects.create_poll方法的输入无效,例如,我最终可能会意外保存投票而没有任何选择。但我不认为我可以new_poll.save()在创建 Choice 实例时不出错而离开到最后。

我可以在方法try...except的开头放一些东西create_poll来确保输入都是有效的,但我担心如果我这样做会破坏 DRY。

我应该以这种方式使用自定义管理器方法吗?如果是这样,我应该如何最好地处理验证?如果不是,对于某些等效功能,什么被认为是好的做法?

提前致谢。

0 投票
1 回答
31181 浏览

django - select_related 与反向外键

我在 Django 中有两个模型。第一个具有哪些工作职能(职位)向哪些其他职位报告的层次结构,第二个是人员及其担任的工作职能。

当我有一个人记录并且我想找到这个人的经理时,我必须这样做

如果我让人们使用QuerySet,我可以使用 position 和 report_to 加入(并避免第二次访问数据库)Person.objects.select_related('position', 'position__reports_to').filter(...),但是有没有办法避免再次访问数据库来获取 person_set?我尝试添加'position__reports_to__person_set'或只是添加position__reports_to__personselect_related,但这似乎并没有改变查询。这prefetch_related是为了什么?

我想制作一个自定义管理器,这样当我进行查询以获取人员记录时,我还可以获得他们的 PositionHeirarchy 和他们经理的人员记录,而无需更多地往返数据库。这是我到目前为止所拥有的:

0 投票
1 回答
740 浏览

django - 具有跨不同模型注释的复杂查询集

我正在使用 Django 1.6 并具有以下模型(为了便于阅读而进行了一些简化):

使用queryset(在经理中),我想获得给定日期的所有可用房间,即max_persons未满足的地方。

到目前为止,我已经尝试过类似的Q东西,Room.objects.filter(hospitalization__date_out__lt="2014-04-25")但我无法弄清楚max_persons比较。

你有什么想法吗?

编辑

与每个房间相关的 Person 对象的数量代表了该房间中的人数。

因此,根据 Karl 在下面的建议,我尝试使用:

  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=hospitalization_set__stay__person.Count()).exclude(num_persons__lte=max_persons)
    • 产量NameError: name 'hospitalization_set__stay__person' is not defined
  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization_set__stay__person')).exclude(num_persons__lte=max_persons)
    • 产量FieldError: Cannot resolve keyword 'hospitalization_set' into field.
  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization__stay__person')).exclude(num_persons__lte=F('max_persons'))
    • 没有任何结果([]),而根据我当前的数据库,我预计至少有三个结果。
    • When removing .exclude(), I still get no results. It looks like the .annotate() I'm using is doing something wrong.
0 投票
1 回答
1657 浏览

django - 如何将参数传递给 django 模型管理器的 get_queryset 方法?

我正在尝试遵循此文档。我想以某种方式将参数传递给 get_queryset,但不知道如何。下面没有工作演示。

0 投票
1 回答
1078 浏览

django - Django 表单覆盖 ForeignKey 查询集

我正在制作一个用于创建未发布Artist实例的表单,然后Artwork在发布前添加到艺术家。

我有经理隐藏published=False艺术家,不知道如何绕过这个ForeignKey

模型.py

表格.py

我需要让表格“看到”FK 中未发表的艺术家,我该如何实现?

谢谢你。

0 投票
1 回答
332 浏览

mysql - 在 Django 模型的管理器中扩展 SQL 查询?

这是来自 django 文档的代码,它解释了管理器的使用。

基于此代码,我有两个问题:

1)从哪里来r.poll_id?我了解Response与OpinionPollforeignKey关系。为了将OpinionPoll表与Response表一起加入,我需要加入他们的 id。但是要访问Response中的投票 id ,我会做 r.poll.id。是语法, , 一个 MySQL 语法。r.poll_id

为什么按 p.id、p.question、p.poll_date 分组?为什么 GROUP BY p.id 单独是不够的?

2) 是否可以将上述原始 SQL 查询转换为 django ORM 查询?如果可以,那会是什么样子?

我不是一个 SQL 人。所以请耐心等待,如果这听起来很愚蠢

编辑:

如果我想在 Django 之外创建 OpinionPoll 和 Response 表,SQL 语句create会是什么样子?

在 Django shell 中,当我运行时

python manage.py sqlall appname

我得到以下信息:

我看到类似REFERENCES "myapp_opinionpoll"CREATE INDEX以上的东西。我不确定这是否在 SQL 中是如何完成的?