Подтвердить что ты не робот

Как создать фильтр запросов Django, сравнивающий два поля даты в той же модели

Попытка получить запрос, в котором запись активности устарела в моем индексе Solr. Я хочу проверить, установлена ​​ли дата Activity.updated в базе данных больше, чем Activity.added_toSolr_date для той же записи.

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")

Я ссылался на Django Query docs: https://docs.djangoproject.com/en/1.4/ref/models/querysets/ И модульные тесты для образцов: https://github.com/django/django/blob/master/tests/modeltests/or_lookups/tests.py

Также ищите здесь в Stackoverflow. Все примеры используют введенную дату вместо сравнения двух полей даты в той же модели.

4b9b3361

Ответ 1

объекты F.

from django.db.models import F
stale_activities = Activity.objects.filter(updated__gte=F('added_toSolr_date')) 

Ответ 2

Решение Yuji Tomita, к сожалению, не сработало.

Рассмотрим приведенную ниже модель:

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'))

Шаблон:

{% if my_list %}
{% for list in my_list %}
{{ list.text}}
{% endfor %}
{% else %}
<p>there is no list</p>
{% endif %}

В конце концов я получаю пустой список, но я знаю, это неверно. Я также использовал следующее внутри шаблона (без фильтра набора запросов):

{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}

Это сработало, но я бы предпочел увидеть более элегантное решение.