두 개의 django 모델이있는 경우 : 하나는 페이지와 다른 해당 컨텐츠 개정판을 저장합니다. 이제 용어를 검색하면 각 페이지의 최신 개정판 만 고려하고 싶습니다. django queryset 최신 개정판을 쿼리
from django.db import models
class SlugPage(models.Model):
slug = models.CharField('slug', unique = True, max_length=255)
@property
def current(self):
return self.revisions.latest()
class Revision(models.Model):
page = models.ForeignKey(SlugPage, related_name='revisions')
content = models.TextField('content', blank = True)
modified = models.DateTimeField('modified', auto_now=True)
class Meta:
ordering = ['-modified']
get_latest_by = 'modified'
나는 장고 검색어 세트와 많은 실험,하지만 난 결국 파이썬 문으로 끝났다.
search_term = "some text to look for"
pages = [page for page in SlugPage.objects.all() if search_term in page.current.content]
아직도 나는 이것이 자주 반복되는 패턴으로 더욱 장고와 같은 솔루션이 있다면 궁금합니다.
다음 줄에있는 해결책은 부분적으로 만 문제를 해결합니다. 최신 개정판 만 나열하지만 이전 개정판에서 search_term이 제거 된 경우에도 수행됩니다.
from django.db.models import Max
pages = SlugPage.objects.annotate(Max('revisions__modified')).filter(revisions__content__icontains = search_term)
원하는 것은 무엇입니까? 개정판에 의해 주문이 수정 되었습니까? 나는 꽤 잘 이해하지 못한다 –
거기에 대한 애플 리케이션이 있어요. 이름은 [reversion] (https://github.com/etianen/django-reversion)입니다. 조금 지나친 것일 수도 있지만, 만약 당신이 뭔가 버전을 저글링하려고한다면, 당신은 과거/미래의 어떤 상태로 되돌아가는 것과 같은 다른 기능들을 사용하고 싶어 할 것입니다. – J0HN
내 질문을 고려해 주셔서 감사합니다. 충분히 노골적인 것에 대해 유감스럽게 생각합니다. @Paulo 두 번째 코드 블록에서 원하는 것을 정확히 얻을 수 있습니다. 장고 queryset에 의해 솔루션에 대해 자세히 알고 싶습니다. – user1491229