gpt4 book ai didi

python - Django-干草堆-如何使仅项目的子集可搜索?

转载 作者:行者123 更新时间:2023-12-03 00:27:21 26 4
gpt4 key购买 nike

我有一些要在Django-haystack(elasticsearch后端)中建立索引的项目可搜索。效果很好,但是用户可以收藏项目,我希望用户能够搜索自己的收藏,就像他们可以搜索所有项目一样。收藏夹通过多对多关系表示,因为当用户收藏某个项目时,我需要记录时间。有什么方法可以使用户最喜欢的东西在干草堆中搜索?我不想为每个用户的收藏夹生成单独的索引,因为它们将是多余的,因为项目相同并且已经由主索引建立了索引。以下是我的模型和搜索索引供引用:

class Gallery(models.Model):   
faves = models.ManyToManyField(
User, through='Favorite', null=True, related_name="faves")

class Favorite(models.Model):
user = models.ForeignKey(User)
gallery = models.ForeignKey(Gallery)
date = models.DateField(auto_now_add=True)

class Meta:
ordering = ["date"]

class GalleryIndex(indexes.SearchIndex, indexes.Indexable):

def get_model(self):
return Gallery

谢谢。

最佳答案

您将要查看RelatedSearchQuerySet(http://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#relatedsearchqueryset)。但是,一定要阅读页面上有关性能影响的警告;我只是试了一下,它明显比大多数查询慢。

您会想要这样的东西:

from django.contrib.auth.models import User
from haystack.query import RelatedSearchQuerySet
from .models import Gallery

u = User.objects.get(...)
sqs = RelatedSearchQuerySet().load_all()
sqs = sqs.load_all_queryset(Gallery, u.faves.all())

那应该给您一个只包含用户收藏夹的SearchQuerySet,您可以对其进行进一步的过滤和搜索。

关于python - Django-干草堆-如何使仅项目的子集可搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205301/

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