如果有兩個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'
我用django查詢集進行了很多實驗,但最終我終於得到了這樣的python語句。
search_term = "some text to look for"
pages = [page for page in SlugPage.objects.all() if search_term in page.current.content]
不過我不知道是否有一個更Django的類似解決方案,因爲這是一個經常重複的模式。
我在下一行中提供的解決方案僅解決了部分問題。儘管它只列出了最新版本,但即使在早期版本中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我在第二個代碼塊中得到了我想要的。我想通過django queryset瞭解解決方案,如果它存在的話。 – user1491229