我试图在用户输入的日期过滤BaseDatatableView中的查询集,格式如下:mm/dd/yyyy.所以start_date采用这种格式,并将转换为带有strptime的日期时间,见下文.
我想将它与数据库中的日期datetimefield进行比较,但我想完全匹配月,日,年,无视时间.这就是我所拥有的,所以不起作用.
class AppointmentListJson(LoginRequiredMixin, BaseDatatableView):
....
start_date = params.get('start_date', '')
if start_date:
qs = qs.filter(start_date__contains=datetime.strptime(
start_date, DATE_FORMAT))
return qs
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试过滤Match某天计划的es。我不能只是这样做:
match_queryset.filter(start=date)
Run Code Online (Sandbox Code Playgroud)
因为它也会按时间过滤,但是我可以这样做:
match_queryset.filter(start__year=a_date.year, start__month=a_date.month, start__day=a_date.day)
Run Code Online (Sandbox Code Playgroud)
但这太复杂了,我觉得可能有一种更简单的方法。
然后,我还可以使用范围:
t0 = datetime.datetime.combine(a_date, datetime.time(0, 0))
t1 = datetime.datetime.combine(a_date, datetime.time(23, 59, 59))
match_queryset.filter(start__gte=t0, start__lte=t1)
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个过大的选择,并且可能会生成效率低下的查询。
我不能只是查询以实际日期为目标吗?就像是:
# this of course doesn't work
match_queryset.filter(start__date=date)
Run Code Online (Sandbox Code Playgroud)
无需说我已经尝试寻找解决方案,但找不到任何解决方案。
我有一个这样的模型
class Maca(models.Model):
created_at = models.DateTimeField(
auto_now_add=True
)
Run Code Online (Sandbox Code Playgroud)
现在我想在views.py 文件中获取今天创建的所有条目,
我正在尝试这个
Maca.objects.filter(created_at=datetime.today().date())
Run Code Online (Sandbox Code Playgroud)
但这也会查找创建对象的时钟。
PS 我无法更改模型中的字段,因为我也需要时钟用于其他目的。
有人可以帮我选择今天创建的所有条目吗?
提前致谢
class Data(models.Model):
time = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
我有我的变量:
var = 2013-01-17 17:30
Data.objects.filter(time=var)
Run Code Online (Sandbox Code Playgroud)
我需要从这一天开始的所有数据(2013-01-17 - 没有时间)
怎么做?
我正在尝试按月和年过滤日期时间字段。由于某些未知原因,在输入月份和年份时,我返回一个空集。
模型:
class SomePost(model.Models):
timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
询问:
p = SomePost.objects.filter(timestamp__year=2014, timestamp__month=1)
Run Code Online (Sandbox Code Playgroud)
我认为这与月份有关,但我看不出我做错了什么。
好的,所以我将模型日期时间字段转换为日期字段并且查询有效。
生成的 sql 是这样的:
SELECT
`a_post`.`id`,
`a_post`.`title`,
`a_post`.`slug`,
`a_post`.`text`,
`a_post`.`timestamp`,
`a_post`.`published` FROM `a_post`
WHERE EXTRACT(MONTH FROM `a_post`.`timestamp`) = 2
ORDER BY `a_post`.`timestamp` DESC;
Run Code Online (Sandbox Code Playgroud)
但是当我将它转换回日期时间字段时,sql 是:
SELECT
`a_post`.`id`,
`a_post`.`title`,
`a_post`.`slug`,
`a_post`.`text`,
`a_post`.`timestamp`,
`a_post`.`published` FROM `a_post`
WHERE EXTRACT(MONTH FROM CONVERT_TZ(`a_post`.`timestamp`, 'UTC', UTC)) = 1
ORDER BY `a_post`.`timestamp` DESC
Run Code Online (Sandbox Code Playgroud)
看起来好像是 conver_tz 导致了这个问题。如果我在查询返回结果时删除 convert_tz 函数。
关于这里发生了什么的任何想法?
我尝试使用 django_filter 的 DateFilter 按确切日期进行过滤,但无法让它返回任何结果。
myapp/models.py
from django.db import models
class Event(models.Model):
start = models.DateField()
title = models.CharField(_'title'), max_length=256)
Run Code Online (Sandbox Code Playgroud)
myapp/filters.py
from myapp.models import Event
import django_filters
class EventFilter(django_filters.FilterSet):
start = django_filters.DateFilter(
'start', label=_('With start date'),
widget=forms.DateInput() # I'm using a datepicker-like widget to enter date
)
class Meta:
model = Event
fields = ('start',)
Run Code Online (Sandbox Code Playgroud)
例如:我有一个开始日期为 2012 年 1 月 14 日的活动。当我在日期过滤器中输入该值时,它什么也不返回。
我无法在 django_filter 的文档站点中找到有关 DateFilter 的更深入的描述,无论是在其过滤器参考还是使用 django-filter 指南中。或者一般的任何地方。有什么想法我可能做错了什么吗?
我不认为日期选择器小部件的日期格式有任何问题,因为它以另一种形式使用(用于输入数据)并且工作正常。
附加信息:我正在使用 django-1.6 以及 django-filter 的最新版本
我在这里看到了旧问题中接下来的两种方法,但我不清楚它们之间的区别是什么:
{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min),
datetime.datetime.combine(date, datetime.time.max))}
Run Code Online (Sandbox Code Playgroud)
和
YourModel.objects.filter(datetime_published__year='2008',
datetime_published__month='03',
datetime_published__day='27')
Run Code Online (Sandbox Code Playgroud)