gpt4 book ai didi

python - django queryset 仅查询最新版本

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:32 25 4
gpt4 key购买 nike

如果有两个 django 模型:一个存储页面,另一个存储相应的内容修订。现在,如果我搜索一个术语,我只想考虑每个页面的最新版本。

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)

最佳答案

如果您想通过 SlugPage 遍历它,您可以这样做。

return self.revisions_set.filter(content__icontains=search_term).latest('modified')

这将为您提供与 .filter() 匹配的所有 Revision 对象以及 modified 字段的最新对象。

关于python - django queryset 仅查询最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com