Comment créer un filtre d’interrogation Django comparant deux champs de date dans le même modèle

Essayer d’obtenir une requête où l’enregistrement d’activité est obsolète dans mon index Solr. Je veux vérifier si la date Activity.updated dans la firebase database est supérieure à Activity.added_toSolr_date pour le même enregistrement.

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

Modèle

 class Activity(models.Model): # Last time entry / mesortingc 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") 

J’ai référencé les documents Django Query: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ Et les tests unitaires pour les exemples: https://github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py

Aussi recherché ici sur Stackoverflow. Tous les exemples utilisent une date saisie au lieu de comparer deux champs de date dans le même modèle.

F objects.

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

La solution de Yuji Tomita, malheureusement, n’a pas fonctionné.

Considérons un modèle ci-dessous:

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

Queryset:

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

Modèle:

 {% if my_list %} {% for list in my_list %} {{ list.text}} {% endfor %} {% else %} 

there is no list

{% endif %}

Au final, je reçois une liste vide, mais je sais, ce n’est pas correct. J’ai également utilisé les éléments suivants dans le modèle (sans filtre de requête):

 {% if list.created|date:'dmyh:i:s' == list.modified|date:'dmyh:i:s' %} 

Cela a fonctionné, mais je préférerais voir une solution plus élégante.