【发布时间】:2018-09-26 05:15:38
【问题描述】:
我想像这样在 Django 模板中循环查询集:
{% for thing in things %}
//Do stuff
{% endfor %}
但我不想遍历我所有的“东西”,而是其中的一个子集。 可以说我的东西模型有一个字符域“颜色”。现在我只想遍历颜色不是无的东西。 我现在将在我的模型中创建一个自定义查询集,如下所示:
def colored_things(self):
return things.objects.filter(color__isnone=False)
但是如果我回到我的模板循环我的彩色东西,它的行为就好像它是空的(我的 for 循环的 {% empty %} 部分被触发)。
{% for thing in things %}
//Do stuff
{% empty %}
{% endfor %}
那么我需要做什么才能在我的模板中访问我的自定义查询集(在模型中创建,但如果有帮助,我可以将它放在其他地方)?
【问题讨论】:
-
只需将其作为属性并在您的模板中使用
-
你的问题不清楚。
colored_things是哪个类的方法?你怎么称呼那个方法?你如何将结果传递给模板? -
colored_things 是 things-model 中的一个方法。 @Daniel 我想这是我的问题。如何将结果传递给我的模板?我想我可以通过调用 for 循环中的方法来访问它们。我尝试将它作为一个属性,它的行为方式与方法相同
-
根据您的用例,您可以在模型中使用
@property或@cached_property,定义自定义模型管理器或自定义查询集。如果至少没有模型和视图的基本示例,就很难提供准确的答案。您的方法colored_things没有任何意义。我们看不到things来自哪里以及它是什么。最终你想写self.objects...。 -
这么说吧……您使用的是基于类的视图还是常规视图,所以我们知道您是如何将变量传递给模板的。因为真正的
colored_things将是如果来自模型one = Color.objects.get(id=1)的结果然后not_colored = one.colored_things()不合逻辑,我还是会从视图中进行查询,因为它与基于模型实例本身的结果无关。跨度>
标签: python django django-models django-templates