Как индексировать ImageField в django-elasticsearch-dsl
Радуйтесь все! Я пишу сайт на Django. Делаю систему поиска с использованием django-elasticsearch-dsl
.
И у меня возникла проблема, когда мне нужно проиндексировать поле ImageField в классе BookDocument для того, чтобы отобразить изображение книги на странице поиска книги
Вот моя модель книги:
books/models.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:
search/documents.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, и только этот файл подходит для хранения данных о файлах, я не знаю, как изменить такое поведение. Возможно, кто-то сталкивался с подобной проблемой и знает, как заставить ее работать
A FileField
[Django-doc] is essentially jus a CharField
[Django-doc] with some extra logic to wrap the data into a FieldFile
that can then open, write, etc. on the file handler.
Вы можете создать документ с 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',
]