问题标签 [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.
django - 自定义管理器对象在 Django 中不起作用?
这是我models
和manager
班级。我认为问题出在PostingFilterManager
下面。他们让我搜索关键字的方式title
是body_text
错误的。我想在下面查询keywords
intitle
和modelbody_text
的列表。Postings
我没有收到任何错误,但同时浏览器上没有显示任何内容。我确信过滤器应该返回一个帖子。
my view:
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_queryset
由all()
. 但是谁阻止我all()
在我的自定义管理器中覆盖?尽管我同意这样做是不好的设计。
据我所知,该
all()
方法并不能保证返回一个 QuerySet。究竟MyModel.objects
返回什么?这句话叫all()
吗?或`get_queryset()?你喜欢
MyModel.objects.filter(...)
还是MyModel.objects.all().filter(...)
。如果是这样,为什么?你有没有遇到过不可靠的经理,他们会以一种不受欢迎的方式搞乱这些方法?
python - 用于获取查询的模型管理器和模型方法
我有一个模型customer
。我也有一个模型管理器,并且我添加了一个QuerySet
具有某些方法的类。add_meta()
当我使用 Customers.objects.filter().add_meta() 时,我倾向于获取每个实例的所有元信息。但是当我使用时,Customer.objects.get(pk=1)
我不能使用那种meta_data()
方法。
这是我的代码。
可重用的管理器
模型
尝试了以下
那没用
任何人都可以知道我如何仍然可以使用add_meta
get 和这个现有代码。
django - Django ORM。加入子查询
我有一个包含一些网站列表的表格和一个包含它们统计信息的表格。
我想查看具体日期的所有网站和统计数据。如果该日期的统计记录不存在,则选择必须仅包含站点。
如果我使用:
我不会得到my_date
在stats
表中没有记录的网站。因为在这种情况下,SQL 查询将如下所示:
查询条件将排除具有 NULL 日期的记录,并且没有统计信息的站点将不包括在选择中。
在我的情况下,我需要加入统计表,该表已经按日期过滤:
如何将此查询转换为 Django ORM?
谢谢。
django - 验证自定义管理器方法中的输入?
假设我正在创建一个投票应用程序,我希望用户一起创建他们的投票和他们的选择,而不是在以后修改它们。
目前我有类似的东西:
但是,如果Poll.objects.create_poll
方法的输入无效,例如,我最终可能会意外保存投票而没有任何选择。但我不认为我可以new_poll.save()
在创建 Choice 实例时不出错而离开到最后。
我可以在方法try...except
的开头放一些东西create_poll
来确保输入都是有效的,但我担心如果我这样做会破坏 DRY。
我应该以这种方式使用自定义管理器方法吗?如果是这样,我应该如何最好地处理验证?如果不是,对于某些等效功能,什么被认为是好的做法?
提前致谢。
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__person
到select_related
,但这似乎并没有改变查询。这prefetch_related
是为了什么?
我想制作一个自定义管理器,这样当我进行查询以获取人员记录时,我还可以获得他们的 PositionHeirarchy 和他们经理的人员记录,而无需更多地往返数据库。这是我到目前为止所拥有的:
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.
- 没有任何结果(
django - 如何将参数传递给 django 模型管理器的 get_queryset 方法?
我正在尝试遵循此文档。我想以某种方式将参数传递给 get_queryset,但不知道如何。下面没有工作演示。
django - Django 表单覆盖 ForeignKey 查询集
我正在制作一个用于创建未发布Artist
实例的表单,然后Artwork
在发布前添加到艺术家。
我有经理隐藏published=False
艺术家,不知道如何绕过这个ForeignKey
。
模型.py
表格.py
壳
我需要让表格“看到”FK 中未发表的艺术家,我该如何实现?
谢谢你。
mysql - 在 Django 模型的管理器中扩展 SQL 查询?
这是来自 django 文档的代码,它解释了管理器的使用。
基于此代码,我有两个问题:
1)从哪里来r.poll_id
?我了解Response与OpinionPoll有foreignKey
关系。为了将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 中是如何完成的?