查询Django模型以检索集列表

时间:2019-10-22 16:42:27

标签: django django-models

我想获取与用户关联的所有对象,并根据一些其他逻辑将检索到的列表拆分为UI中的三个不同列表。我目前正在通过在模型上设置@property然后在模板中进行一堆循环和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] =')?

1 个答案:

答案 0 :(得分:0)

如果您很少写数据库并且经常阅读,那么最好将属性保存在数据库字段中,然后再执行一次.filter()

否则,是的,您应该在模型上添加一个方法-这就是该逻辑所属的位置。如果您希望它每次都返回所有三个组,那么数据库效率就没有多少了:像现在一样,只需一次从数据库中提取所有对象,然后使用列表推导或喜欢。此性能应该无关紧要。如果是这样:请参见第一段。