tutorial queryset objects cual consultas campos calculados avanzadas django django-queryset

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.