Próbuję uzyskać zapytanie, w którym rekord Aktywności jest nieaktualny w moim indeksie Solr. Chcę sprawdzić, czy Activity.updated
data w bazie danych jest większa niż data Activity.added_toSolr_date
dla tego samego rekordu.
stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date)
Model
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")
Odwołałem się do dokumentacji Django Query: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ Oraz testy jednostkowe dla próbek: https://github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py
Przeszukano także tutaj w Stackoverflow. Wszystkie przykłady używają wprowadzonej daty zamiast porównywać dwa pola daty w tym samym modelu.
django
django-queryset
Carlos Ferreira
źródło
źródło
Rozwiązanie Yuji Tomita niestety nie zadziałało.
Rozważ poniższy model:
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'))
Szablon:
{% if my_list %} {% for list in my_list %} {{ list.text}} {% endfor %} {% else %} <p>there is no list</p> {% endif %}
W końcu otrzymuję pustą listę, ale wiem, że nie jest poprawna. W szablonie wykorzystałem również następujące elementy (bez filtra queryset):
{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}
Udało się, ale wolałbym zobaczyć bardziej eleganckie rozwiązanie.
źródło
mydate__exact = F('my_other_date')
w kwerendzie nie działa, gdy „moja_inna_data” ma wartość Brak.django-extensions
TimeStampedModel
, znaczniki czasucreated
i sąupdated
równe z dokładnością do milisekundy. Występuje minimalne opóźnienie. Moją szybką poprawką było po prostu porównanie tego z sekundą.