Ich habe versucht, eine Abfrage zu erhalten, bei der der Aktivitätsdatensatz in meinem Solr-Index veraltet ist. Ich möchte überprüfen, ob das Activity.updated
Datum in der Datenbank größer ist als das Activity.added_toSolr_date
für denselben Datensatz.
stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date)
Modell
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")
Ich habe auf Django Query-Dokumente verwiesen: https://docs.djangoproject.com/de/1.4/ref/models/querysets/ Und Unit-Tests für Beispiele: https://github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py
Auch hier auf Stackoverflow gesucht. Alle Beispiele verwenden ein eingegebenes Datum, anstatt zwei Datumsfelder im selben Modell zu vergleichen.
django
django-queryset
Carlos Ferreira
quelle
quelle
Die Lösung von Yuji Tomita hat leider nicht funktioniert.
Betrachten Sie ein Modell unten:
class list(models.Model): text = models.CharField(max_length=140) created = models.DateTimeField() modified = models.DateTimeField()
Abfragesatz:
my_list = todolist.objects.order_by('created').filter(created__gte=F('modified'))
Vorlage:
{% if my_list %} {% for list in my_list %} {{ list.text}} {% endfor %} {% else %} <p>there is no list</p> {% endif %}
Am Ende bekomme ich eine leere Liste, aber ich weiß, es ist nicht korrekt. Ich habe auch Folgendes in der Vorlage verwendet (ohne Queryset-Filter):
{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}
Es hat funktioniert, aber ich würde es vorziehen, eine elegantere Lösung zu sehen.
quelle
mydate__exact = F('my_other_date')
in einer Abfrage nicht funktioniert, wenn 'my_other_date' selbst None ist.django-extensions
TimeStampedModel
dercreated
undupdated
gleich Zeitstempel auf die Millisekunde nach unten. Es gibt eine minimale Verzögerung. Meine schnelle Lösung bestand darin, es mit der Sekunde zu vergleichen.