相关疑难解决方法(0)

Django仅根据日期过滤日期时间

我试图在用户输入的日期过滤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)

谢谢

database django datetime django-queryset

11
推荐指数
1
解决办法
1万
查看次数

Django:datetime按日期忽略时间过滤

我正在尝试过滤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)

无需说我已经尝试寻找解决方案,但找不到任何解决方案。

python django

5
推荐指数
1
解决办法
3804
查看次数

获取具有今天日期的所有对象,django

我有一个这样的模型

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 我无法更改模型中的字段,因为我也需要时钟用于其他目的。

有人可以帮我选择今天创建的所有条目吗?

提前致谢

python django web

5
推荐指数
1
解决办法
3531
查看次数

没有时间的DateTimeField

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 - 没有时间)

怎么做?

django

4
推荐指数
2
解决办法
4786
查看次数

Django按月和年过滤

我正在尝试按月和年过滤日期时间字段。由于某些未知原因,在输入月份和年份时,我返回一个空集。

模型:

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 函数。

关于这里发生了什么的任何想法?

python django django-models

4
推荐指数
2
解决办法
1万
查看次数

如何使用 django_filters.DateFilter?

我尝试使用 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 的最新版本

python django django-filter

4
推荐指数
2
解决办法
1万
查看次数

Django模型时间范围过滤方法

我在这里看到了旧问题中接下来的两种方法,但我不清楚它们之间的区别是什么:

{'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)

django filtering date-range django-models

2
推荐指数
1
解决办法
3660
查看次数