如何在Django-ElasticSearch-DSL中索引Imagefield

qvtsj1bj  于 2022-10-06  发布在  Go
关注(0)|答案(1)|浏览(162)

大家好,Р!我在Django上写了一个网站。我正在用django-elasticsearch-dsl做一个搜索系统。当我需要为BookDocument类中的ImageField字段建立索引以便在图书搜索页面上显示图书图像时,我遇到了一个问题

这是我的图书模型:

  • 书籍/模型.py*
class Book(models.Model):
    title = models.CharField(max_length=120, default=' ', verbose_name='Назва')
    description = models.TextField(verbose_name='Опис')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категорія')
    date_at = models.DateField(auto_now_add=True, verbose_name='Дата створення')
    image = models.ImageField(upload_to='photos/%Y/%m/%d/')
    authors = models.ManyToManyField(Author, verbose_name='Автори')
    content = models.FileField(upload_to='contents/%Y/%m/%d/', blank=True)
    price = models.IntegerField(verbose_name='Ціна', default='0')

下面是我的BookDocument类:

  • 搜索/Docents.py*
@registry.register_document
class BookDocument(Document):
    image = FileField()

    class Index:
        name = 'books'
        settings = {
            'number_of_shards': 1,
            'number_of_replicas': 0
        }

    class Django:
        model = Book

        fields = [
            'id',
            'title',
            'description',
        ]

但是图像没有显示在搜索页面上,而且由于Django-ElasticSearch-DSL中没有ImageField域,并且只有这个文件适合存储文件数据,我不知道如何改变这种行为可能有人遇到了这样的问题,并知道如何使其工作

ru9i0ody

ru9i0ody1#

一个**FileField文件[django-doc]实质上就是一个CharField**文件[django-doc],它带有一些额外的逻辑来将数据 Package 到FieldFile中,然后该FieldFile可以在文件处理器上打开、写入等。

因此,您可以使用TextField创建文档:

@registry.register_document
class BookDocument(Document):
    image = fields.TextField()

    class Index:
        name = 'books'
        settings = {'number_of_shards': 1, 'number_of_replicas': 0}

    class Django:
        model = Book

        fields = [
            'id',
            'title',
            'description',
        ]

相关问题