【问题标题】:Django how to list model objects date wiseDjango如何按日期列出模型对象
【发布时间】:2015-05-25 14:03:36
【问题描述】:

我有一个模型,我需要从中列出给定时间段内的所有对象。 例如:10-05-2014 to 10-12-2014 然后我需要明智地显示对象的日期。意思是首先显示在start_date(10-05-2014) up until end_date(10-12-2014)上创建的对象

For example: 
    10-05-2014:
         objects list for that day
    11-05-2014:
         objects list for that day
    and so on until end_date

查询:

MyModel.objects.unsettled.filter(
            created_on__range=[start_date, end_date]
        )

但我的问题是如何在模板中按日期按升序列出查询集。这样在同一日期创建的所有对象都将显示在该日期下。简而言之,我想在按日期划分的部分中显示列表。

MyModel.objects.unsettled.filter(created_on__range=[start_date, end_date]).order_by("created_on")。但它只会对列表进行排序。如何对结果进行分组??

【问题讨论】:

    标签: django


    【解决方案1】:

    使用{% ifchanged %}模板标签:

    {% for obj in obj_list %}
    
        {% ifchanged %}
            <h2>{{ obj.created_on|date }}</h2>
        {% endifchanged %}
    
        <div>{{ obj.name }}</div>
    
    {% endfor %}
    

    另一个(稍微复杂一点)选项是使用{% regroup %} 标签。

    【讨论】:

    • 你能告诉我怎么做吗?我必须查询集MyModel.objects.unsettled.filter(created_on=[start_date, end_date]) 和MyModel.objects.settled.filter(settled_on=[start_date, end_date])。现在我该如何明智地列出它们。
    • 我看到了两个选项: 1. 按日期分组数据/在视图中解决 2. 传递单个查询集,其中包含由 ('created_on', 'settled') 排序的已解决/未解决实例,然后使用 {% regroup %} 标记两次 -首先是日期,然后是已确定的标志。
    • 我明白你想要什么。在我看来,如果您可以将列表传递为MyModel.objects.filter(created_on=[start_date, end_date]).order_by('created_on', 'settled'),那么带有两个{% regroup %} 标签的第二个选项是一种可行的方法。
    • 实际上我有两个日期 created_on 和 settled_on 带有 is_settled 标志 [True/False]。现在在特定日期可以解决一些对象或可以创建一些对象。意味着对于某些对象,日期可以是 created_on,对于另一个对象,日期可以是 settled_on。所以 created_on 和 resolved_on 应该匹配那个特定的日期。同样明智的是,我需要明智地准备在一年中创建或解决的所有对象的列表
    • 啊,我没有注意到有两个不同的范围字段。然后你必须在视图中折腾数据。如果没有 python 代码的支持,Django 模板系统无法处理这种情况。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2012-11-29
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多