[django] 동일한 모델에서 두 개의 날짜 필드를 비교하는 Django 쿼리 셋 필터를 만드는 방법
내 Solr 색인에서 활동 레코드가 오래된 쿼리를 가져 오려고합니다. Activity.updated
데이터베이스 의 날짜 Activity.added_toSolr_date
가 동일한 레코드 의 날짜보다 큰지 확인하고 싶습니다 .
stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date)
모델
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 문서를 참조했습니다 :
https://docs.djangoproject.com/en/1.4/ref/models/querysets/
샘플에 대한 단위 테스트 :
https://github.com/django/django/blob/master/tests/ modeltests / or_lookups / tests.py
Stackoverflow에서도 여기에서 검색했습니다. 모든 예제는 동일한 모델의 두 날짜 필드를 비교하는 대신 입력 된 날짜를 사용합니다.
답변
F 개체.
from django.db.models import F
stale_activities = Activity.objects.filter(updated__gte=F('added_toSolr_date'))
답변
불행히도 Yuji Tomita의 해결책은 작동하지 않았습니다.
아래 모델을 고려하십시오.
class list(models.Model):
text = models.CharField(max_length=140)
created = models.DateTimeField()
modified = models.DateTimeField()
쿼리 셋 :
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 %}
결국 빈 목록이 표시되지만 정확하지 않습니다. 또한 템플릿 내에서 다음을 사용했습니다 (queryset 필터 없음).
{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %}
효과가 있었지만 더 우아한 솔루션을보고 싶습니다.