如何创建一个Django的queryset过滤器在同一模型中比较两个日期字段(How to crea

2019-06-28 05:46发布

试图让一个查询,其中活动记录在我的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的查询文档: https://docs.djangoproject.com/en/1.4/ref/models/querysets/而对于样本单元测试: https://github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py

也搜寻此#2。 所有的例子都使用输入的日期,而不是在同一个模型比较两个日期字段。

Answer 1:

˚F对象。

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


Answer 2:

富田裕二的解决方案,不幸的是,没有工作。

考虑下面的模型:

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' %}

它的工作,但我宁愿看到一个更完美的解决方案。



文章来源: How to create a Django queryset filter comparing two date fields in the same model