首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与django-hvad一起工作

如何与django-hvad一起工作
EN

Stack Overflow用户
提问于 2015-04-27 20:19:42
回答 1查看 285关注 0票数 1

我正在开发一个多语言的应用程序,在那里我需要实现一个搜索引擎,我选择了干草堆。

这是我想要索引的模型

代码语言:javascript
复制
class Post(TranslatableModel):
    category = models.ForeignKey(
        Category,
        related_name='posts',
        verbose_name=_(u'Categoría')
    )
    slug = AutoSlugField(
        populate_from='title'
    )
    featured_picture = ThumbnailerImageField(
        upload_to='blog/posts/featured-pictures',
        verbose_name=_(u'Imagen destacada'),
        help_text=_(u'Tamaño: 850 x 423px. Será recordada si no.')
    )
    box_bg = models.CharField(
        max_length=20,
        verbose_name=_(u'Color de fondo de la caja'),
        choices=SERVICE_BOX_COLORS,
        # Could be an image
        null=True, blank=True
    )
    box_image_bg = ThumbnailerImageField(
        upload_to='blog/posts/background-images',
        verbose_name=_(u'Imagen de fondo de la caja'),
        null=True, blank=True,
        help_text=_(u'Tamaño: 500 x 500px. Será recordada si no.')
    )

    translations = TranslatedFields(
        title=models.CharField(
            max_length=100,
            verbose_name=_(u'Título')
        ),
        content=RichTextField(
            verbose_name=_(u'Contenido')
        ),
        meta_description=models.TextField(
            verbose_name=_(u'Meta description (SEO)'),
            help_text=_(u'Máximo 160 caracteres.'),
            max_length=160
        )
    )

我不知道如何处理hvad翻译领域

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-29 20:53:57

我将描述我在面对类似问题时所做的事情。

在索引定义中,为当前语言指定一个字段。如果执行查询,Django-hvad总是返回“language_code”字段,例如:

代码语言:javascript
复制
 class PostIndex(indexes.SearchIndex, indexes.Indexable):
     # your field definitions here
     lan = indexes.CharField(model_attr='language_code')

     # rest of your configuration here

     def index_queryset(self, using=None):
         return self.get_model().objects.language('all').all()

     def read_queryset(self, using=None):
         return self.get_model().objects.language()

这样,当Hay堆栈对帖子进行索引时,它将分别获取每个语言版本,并与语言代码一起存储。

您必须修改搜索表单,以便将lan字段作为筛选器包括在内:

代码语言:javascript
复制
class PostSearchForm(SearchForm):
    lan = forms.CharField(required=False)

    def search(self):
        sqs = super(PostSearchForm, self).search()
        if not self.is_valid():
            return self.no_query_found()
        if self.cleaned_data.get('lan'):
            sqs = sqs.filter(lan=self.cleaned_data['lan'])
        return sqs

它可以是一个隐藏的输入字段,其值取自request.LANGUAGE_CODE。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29905184

复制
相关文章

相似问题

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