首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问与草栈SearchQuerySet关联的ImageFields

访问与草栈SearchQuerySet关联的ImageFields
EN

Stack Overflow用户
提问于 2012-05-22 22:34:19
回答 3查看 889关注 0票数 2

我有一个带有ImageField的模型,我正在使用Django Haystack为搜索建立索引,我想在我的搜索结果中使用这些图像。如果我错了,请纠正我,但是在Django Haystack SearchQuerySet中不能有ImageField。那么,访问与SearchQuerySet关联的模型ImageFields的最佳方式是什么呢?我真的需要遍历模型I并将它们添加到单独的QuerySet中吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-22 22:48:03

只需使用result.object.my_image_field即可。object属性包含与搜索结果相关联的完整Django对象。

票数 2
EN

Stack Overflow用户

发布于 2013-06-06 21:28:45

访问对象命中数据库。

如果你不想访问数据库,你可以这样索引:

代码语言:javascript
复制
class MyIndex(SearchIndex, Indexable):
   ...
   photo_url = CharField()

   def prepare_photo_url(self, obj):
       return obj.image_field.path

来源:http://django-haystack.readthedocs.org/en/latest/searchindex_api.html#prepare-foo-self-object

票数 3
EN

Stack Overflow用户

发布于 2014-03-25 22:52:07

我知道这个问题很老了,但我也有同样的问题,我有信息要分享。

懒于阅读?跳转到Solution

说你有这个模型:

代码语言:javascript
复制
class School(models.Model):
  city = models.CharField(max_length=50)
  name = models.CharField(max_length=50)
  slug = models.SlugField(max_length=50, unique=True)
  cover = models.ImageField(upload_to='images/school-covers/')

你可以看到ImageField:cover。

如果你想用带有自动补全功能的Haystack来索引学校模型,你应该这样做:

代码语言:javascript
复制
class SchoolIndex(indexes.SearchIndex, indexes.Indexable):
  name = indexes.EdgeNgramField(model_attr='name')
  city = indexes.EdgeNgramField(model_attr='city')
  slug = indexes.CharField(model_attr='slug')

  def get_model(self):
    return School

  def index_queryset(self, using=None):
    # Used when the entire index for model is updated.
    return self.get_model().objects.all()

如您所见,我没有包含ImageField,因为ImageField对象不是indexes包的一部分。

此代码片段将使用学校模型的namecity字段进行索引。然后在AJAX视图中,您将使用SearchQuerySet处理搜索:

代码语言:javascript
复制
def search_ecoles(request):
  name = SearchQuerySet().autocomplete(name=request.POST.get('search_text',''))
  city = SearchQuerySet().autocomplete(city=request.POST.get('search_text',''))

  schools = name | city

  return render(request, 'website/ajax_search.html', {'schools' : schools})

到目前为止,我可以像这样访问我的模板中的结果:

代码语言:javascript
复制
<ul>
  {% for school in schools %}
  <li>
    <span id="name"><a href="/school/{{ school.slug }}/">{{ school.name }}</a></span>
    <span id="city">City: {{ school.city }}</span>
  </li>
  {% endfor %}
</ul>

解决方案

但也许你想要访问封面ImageField。最简单的方法,也可能是更简洁的方法,就是在School对象中使用对象,如下所示:

代码语言:javascript
复制
<img src="{{ school.object.cover.url }}" />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10704206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档