如何创建 Django 查询集过滤器来比较同一模型中的两个日期字段

问题描述 投票:0回答:2

尝试获取 Solr 索引中活动记录已过时的查询。 我想检查数据库中的

Activity.updated
日期是否大于同一记录的
Activity.added_toSolr_date

stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date) 

型号

class Activity(models.Model):
    # Last time entry / metric was updated in the Activity model database
    updated =  models.DateTimeField( verbose_name="CRUD date")
    # When it was added to Solr Index Date
    added_toSolr_date = models.DateTimeField(blank=True, null=True, verbose_name="Added to Solr Index Date")

我引用了 Django Query 文档: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ 以及样本的单元测试: https://github.com/django/django/blob/master/tests/modeltests/or_lookups/tests.py

也在 Stackoverflow 上搜索过。所有示例都使用输入的日期,而不是比较同一模型中的两个日期字段。

django django-queryset django-filter
2个回答
206
投票

F 个物体。

from django.db.models import F
stale_activities = Activity.objects.filter(updated__gte=F('added_toSolr_date')) 

4
投票

不幸的是,富田雄二的解决方案并没有奏效。

考虑下面的模型:

class list(models.Model):
    text = models.CharField(max_length=140)
    created = models.DateTimeField()
    modified = models.DateTimeField()

查询集:

my_list = todolist.objects.order_by('created').filter(created__gte=F('modified'))

模板:

{% if my_list %}
{% for list in my_list %}
{{ list.text}}
{% endfor %}
{% else %}
<p>there is no list</p>
{% endif %}

最后我得到一个空列表,但我知道,这是不正确的。我还在模板中使用了以下内容(没有查询集过滤器):

{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}

它有效,但我更希望看到一个更优雅的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.