django - 有没有办法在 Django 模型的查询集中隐藏对象?
问题描述
就像您看到下面的代码一样,我手动使用模型中的属性status
来Store
显示我的商店HTML Templates
。问题是我编写的代码越多,重复的代码就越多。
我试图找到一种方法来避免那些低效的重复。是否可以设置models.py
为仅显示活动商店以显示在 HTML 模板中?
我问这个是因为我已经做了类似的事情。我有一个字符串类型属性,但我需要在我的模板中以列表格式使用它,所以我创建了一个函数来仅使用列表格式调用它。但是,我不知道如何以同样的方式隐藏非活动商店。
谁能给我一些建议吗?
模型.py
class Store(models.Model):
status = models.CharField(max_length=20,
choices=(
('active', 'Active'), # ('Stored value', 'Label shown on the UI')
('inactive', 'Inactive'),
),
default='inactive')
...
HTML 模板
{% if store.status == 'active' %}
... Show store
{% else %}
... Do not show store
{% endif %}
解决方案
但是,通常人们只需要选择完整对象集的一个子集。要优化初始 QuerySet,以下是两种最常用的方法:
在将查询集发送到模板之前使用或filter()
与exclude()
您的查询集一起使用。
filter(kwargs**)
返回一个新的 QuerySet ,其中包含与给定查找参数匹配的对象。
active_stores = Store.objects.filter(status='active')
# send active_stores to template
或者
exclude(kwargs**)
返回一个新的 QuerySet ,其中包含与给定查找参数不匹配的对象。
active_stores = Store.objects.exclude(status='inactive')
# send active_stores to template
在您的模板中,您可以循环访问而不会出现非活动商店的问题
{% for store in active_stores %} {{商店}} {% 空的 %} 没有商店 {% endfor %}
请参阅Django 文档中的进一步说明
推荐阅读
- python - 在 Python 中向异常添加数据
- excel - Excel 语言环境代码中的 130000 [$-130000] 是什么意思?
- azure-cognitive-search - 空值索引失败
- r - data.table:查找每个组和列名的重复数据。输出组和重复列的名称
- ios - 动画更改滑块的最大值
- python - python 3.7中使用matplotlib的黑噪声
- aws-amplify - AWS Amplify 控制台部署到不同的账户
- mongodb - 如何丢弃引发错误的记录?
- mysql - ASP.NET 数据表:无法启用约束。一行或多行包含违反使用 MySql 的非空、唯一或外键约束的值
- laravel - 按属性获取价值