如何创build一个Django查询集filter,比较同一模型中的两个date字段

尝试获取我的Solr索引中活动logging陈旧的查询。 我想检查数据库中的Activity.updateddate是否大于同一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。