django弹性搜索索引,适用于许多领域

时间:2018-01-17 10:40:32

标签: python django elasticsearch

我已经按照本教程

成功地在我的django项目中集成了弹性搜索

elastic search with django the easy way

我有以下模型结构,

class Product(models.Model):
    product_id = models.IntegerField(default=0)
    product_name = models.CharField(max_length=100)
    description = models.CharField(max_length=500, null=True, blank=True)
    product_tag = models.ManyToManyField(Tag)
    product_unit = models.ForeignKey(Unit)

    def __str__(self):
        return str(self.product_name)

class ProductKeyword(models.Model):
    name = models.CharField(max_length=100)
    product = models.ManyToManyField(Product, related_name="products")
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.name)

    def search_indexing(self):
        obj = ProductKeyWordIndex(
            meta={'id': self.id},
            name=self.name,
            product=self.product.product_name,
            date_created=self.date_created,
            date_updated=self.date_updated,
        )
        obj.save()
        return obj.to_dict(include_meta=True)

我在search_indexing模型中为弹性搜索索引创建了ProductKeyword方法。 当我尝试创建新的ProductKeyword对象时,引发以下错误,

AttributeError: 'ManyRelatedManager' object has no attribute 'product_name'

search_indexing方法,我正在索引self.product.product_name,其中 self.product字段是m2m字段,相同的方法适用于foreign field

我尝试通过更新search_indexing方法来解决问题,

 def search_indexing(self):
    obj = ProductKeyWordIndex(
        meta={'id': self.id},
        name=self.name,
        product=self.product.product_set.all(),
        date_created=self.date_created,
        date_updated=self.date_updated,
    )
    obj.save()
    return obj.to_dict(include_meta=True)

但提出以下错误,

AttributeError: 'ManyRelatedManager' object has no attribute 'product_set'

0 个答案:

没有答案