如何创build一个Django查询集filter,比较同一模型中的两个date字段
尝试获取我的Solr索引中活动logging陈旧的查询。 我想检查数据库中的Activity.updated
date是否大于同一logging的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/和样本的unit testing: https : //github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py
也在这里searchStackoverflow。 所有示例都使用input的date,而不是比较同一模型中的两个date字段。
F对象。
from django.db.models import F stale_activities = Activity.objects.filter(updated__gte=F('added_toSolr_date'))
不幸的是,Yuji Tomita的解决scheme并不奏效。
考虑下面的模型:
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 %}
最后我得到一个空的列表,但我知道,这是不正确的。 我也在模板中使用了下面的内容(没有querysetfilter):
{% if list.created|date:'dmyh:i:s' == list.modified|date:'dmyh:i:s' %}
它的工作,但我宁愿看到一个更优雅的解决scheme。