python - Django :哪几天有对象?

标签 python django calendar

我目前正在为我的一个 Django 项目创建一个简单的日历。日历将显示当前月份和日期。任何有当天商品的日子都会以红色突出显示,以便用户知道当天有商品。元素的数量或元素是什么并不重要。我们关心的只是一天有没有元素。

假设我有以下模型。

class Items(models.Model):
    name = models.CharField(max_length=140)
    datetime = models.DateTimeField(auto_now_add=False)

    def save(self, *args, **kwargs):
        if datetim is None:
            created = datetime.now()
        super(Items, self).save()

这是我目前查找哪些日子有元素的逻辑:

from calendar import monthrange

# Find number of days for June 2015

num_days = monthrange(2015, 6)[1]
days_with_items = []

'''
Increase num_days by 1 so that the last day of the month 
is included in the range
'''
num_days =+ 1

for day in range(0, num_days):
    has_items = Items.objects.filter(datetime__day = day,
                                     datetime__month = 6,
                                     datetime__year = 2015).exists()
    if has_items:
        days_with_items.append(day)
return days_with_items

这会返回一个列表,其中包含所有有项目的日期。这是可行的,但是我正在寻找一种更有效的方法来执行此操作,因为 Django 会多次访问数据库以获取 .exists()

有什么建议吗?

最佳答案

我看到两种可能的选择。第一个是在数据库级别添加计数,第二个是在 python 级别对可用数据进行有效循环。根据数据大小和数据库效率,您可以选择最适合您的。

数据库中的计数解释如下: Django ORM, group by day

或者解决方案二,一个简单的脚本(不是那么优雅......但只是作为一个例子):

days_with_items_hash = {}
items = Items.objects.filter(
   datetime__month = 6, 
   datetime__year = 2015
)
for item in items:
    days_with_item_hash[item.datetime.day] = True

days_with_item = days_with_item_hash.keys()

我会坚持使用数据库解决方案,因为它可以优化(sql View 、仅包含日期的额外列等)

关于python - Django :哪几天有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30741987/

相关文章:

python - 如何使用 matplotlib-basemap 正确投影 tif 图像

python - 手动渲染 Django Formset

android - 获取 IllegalArgumentException : Cannot have both DTEND and DURATION in an event with updating a recurring all day event

Python,重新进入 `with` block

python - 无法使用 pip install ssl 在我的本地系统中安装 ssl

python - pandas DataFrame 对角线

django - 如何检查 Django 模板中集合的大小?

python - 在django中上传到s3之前如何压缩图像?

javascript - 我的全日历上没有显示任何事件。 (来自谷歌日历)

java - myDate 无法解析为变量