【发布时间】:2019-01-09 17:19:24
【问题描述】:
我正在尝试根据预定事件的日期进行过滤。我想要 60 天前发生的项目和从现在起 60 天安排的项目。所以范围的开始是今天 - 60 天,范围的结束是今天 + 60 天。我很长时间没有使用 Django,我不知道这是否是当前版本以及 auto_now 和 auto_add_now 的新问题,或者问题是否是使用 DateField。我在模型上使用了 DateField,因为我不关心时间,也不希望将这些时间字段添加到数据库中。我想要干净的日期。
索引.html
<!DOCTYPE html>
{% load static %}
<title>Document</title>
<body>
<div id=form>
<select name="Title" id="title_box">
{% for item in items %}
<option value="{{item.name}}">{{item.name}}</option>
{% endfor %}
</select>
</div>
</body>
</html>
模型.py
from __future__ import unicode_literals
from django.db import migrations, models
import datetime
class Cycle(models.Model):
name= models.CharField(max_length=255)
start_date = models.DateField(auto_now=False, auto_now_add=False,
blank=True, null=True)
end_date = models.DateField(auto_now=False, auto_now_add=False,
blank=True, null=True)
我将字段从 DateField 更改为 DateTimeField 并没有任何区别,因此我将其更改回 DateField。
Views.py
from django.shortcuts import render, HttpResponse, redirect
from .models import *
import datetime
def main(request):
beginDate = datetime.date.today() - datetime.timedelta(days=60)
stopDate = datetime.date.today() + datetime.timedelta(days=60)
context = {
"items": Cycle.objects.filter(start_date=[beginDate,stopDate])
}
return render (request, 'app/index.html', context)
我想显示 60 天前发生的事件以及接下来 60 天将发生的事件。我现在的代码只反映了模型中的 start_date。我只是想采取一些小步骤并找出一个,然后稍后使用 OR 来获得另一个。我想它会是这样的:
"items": Cycle.objects.filter(start_date=[beginDate,stopDate] | end_date=[beginDate, stopDate])
无论如何,我得到的错误是:
TypeError at /expected string or bytes-like object
我认为错误在于:
context = {
"items": Cycle.objects.filter(start_date=[beginDate,stopDate])
}
我打印了“beginDate”,它给了我 2018-11-09,这对于我想要的范围是正确的。我用 type 看看它是否能帮助我找出不匹配并得到 <class 'datetime.date'> 。我现在在想它可能与models.py不匹配,但我不确定是否是这种情况以及如何使它们匹配。在阅读了几篇文章后,我还尝试使用timezone.now() 和date.today() 来表示beginDate 和stopDate,但得到的错误是没有定义日期和时区。我还确保使用“makemigrations”和“migrate”。
任何帮助将不胜感激。
【问题讨论】:
标签: django django-models django-templates django-views