queryset - objects.filter django
Cómo crear un filtro de conjunto de consultas Django que compare dos campos de fecha en el mismo modelo (2)
Intentando obtener una consulta donde el registro de actividad está obsoleto en mi índice Solr. Quiero verificar si la fecha de Activity.updated
en la base de datos es mayor que la Activity.added_toSolr_date
para el mismo registro.
stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date)
Modelo
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")
Hice referencia a los documentos de consulta de Django: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ Y pruebas unitarias para ejemplos: https://github.com/django/django/blob/master/tests/modeltests/or_lookups/tests.py
También busqué aquí en Stackoverflow. Todos los ejemplos usan una fecha ingresada en lugar de comparar dos campos de fecha en el mismo modelo.
F objetos.
from django.db.models import F
stale_activities = Activity.objects.filter(updated__gte=F(''added_toSolr_date''))
La solución de Yuji Tomita, desafortunadamente, no funcionó.
Considere un modelo a continuación:
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''))
Modelo:
{% if my_list %}
{% for list in my_list %}
{{ list.text}}
{% endfor %}
{% else %}
<p>there is no list</p>
{% endif %}
Al final, recibo una lista vacía, pero sé que no es correcta. También utilicé lo siguiente dentro de la plantilla (sin filtro de consulta):
{% if list.created|date:''d m y h:i:s'' == list.modified|date:''d m y h:i:s'' %}
Funcionó, pero preferiría ver una solución más elegante.