Essayer d'obtenir une requête où l'enregistrement d'activité est périmé dans mon index Solr. Je veux vérifier si le Activity.updated
la date dans la base de données est supérieure à la 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 / 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")
J'ai référencé Django Documents de requête: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ Et des tests unitaires pour les échantillons: - https://github.com/Django/django/blob/master/tests/modeltests/or_lookups/tests.py
Également recherché ici sur Stackoverflow. Tous les exemples utilisent une date entrée au lieu de comparer deux champs de date dans le même modèle.
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érez 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 %}
<p>there is no list</p>
{% endif %}
En fin de compte, je reçois une liste vide, mais je sais, ce n'est pas correct. J'ai également utilisé les éléments suivants à l'intérieur du modèle (sans filtre d'ensemble de requêtes):
{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}
Cela a fonctionné, mais je préférerais voir une solution plus élégante.