django - 查询 django 模型以检索集合列表
问题描述
我想获取与用户关联的所有对象,并根据一些附加逻辑将检索到的列表拆分为 UI 中的三个不同列表。我目前正在通过@property
在模型上设置 a 然后在模板中执行一堆循环和 if/else 来执行此操作。这显然是次优的,因为如果实际部分中没有任何内容,我不想包含部分标题,但是由于我要拉入一个大列表,因此没有empty
状态。
当前的:
模型
class Entry(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
publish_date = models.DateField(null=True, blank=True)
favorite = models.BooleanField(default=False)
看法
entries = Entry.objects.filter(user=request.user)
模板
<strong>FAVORITES</strong>
{% for obj in entries %}
{% if obj.group == 'favorites' %}
...
{% endif %}
{% endfor %}
<strong>PUBLISHED</strong>
{% for obj in entries %}
{% if obj.group == 'published' %}
...
{% endif %}
{% endfor %}
<strong>DRAFT</strong>
{% for obj in entries %}
{% if obj.group == 'draft' %}
...
{% endif %}
{% endfor %}
我应该如何在模型(例如get_groupings
)上添加一个方法,该方法可以以数据库有效的方式返回一个包含三个单独查询集的字典('entries ['favorites] =')?
解决方案
如果您很少写入数据库并经常阅读,最好将您的属性保存在数据库字段中,然后再做一秒钟.filter()
。
否则,是的,你应该在模型上添加一个方法——这就是这个逻辑所属的地方。如果您希望它每次都返回所有三个组,那么就没有或多或少的数据库效率之类的东西:只需像现在一样从数据库中提取所有对象,然后使用列表理解或喜欢。这个性能应该不用担心。如果是:见第一段。
推荐阅读
- python - Flask:TypeError:'int'和'str'的实例之间不支持'<'
- snowflake-cloud-data-platform - 雪花从具有嵌套字典列表的列中获取每个键/值
- php - 准备好的语句中的mysql语法错误或无效的参数号pdo
- image - 如何从drawable设置ImageBitmap?[科特林]
- c++ - C ++递归导致段错误?
- c# - C#模板函数的想法
- r - 在 R 中的列之间应用用户定义的函数
- c - 如何使用 scanf 获取特定格式的用户输入?
- c++ - Aws::S3::S3Client::S3Client useVirtualAddressing 参数有什么作用?
- jquery - 根据表中存在的值在表中显示图标