django - django 抛出错误“无法将模型字段类别转换为 Elasticsearch 字段!”
问题描述
我正在使我的模型与弹性搜索一起工作,并在我的应用程序目录的documents.py中添加了简单的代码,但是
$ ./manage.py search_index --rebuild
给
“django_elasticsearch_dsl.exceptions.ModelFieldNotMappedError:无法将模型字段类别转换为 Elasticsearch 字段!”
模型.py
from django.db import models
from django.urls import reverse
class Category(models.Model):
name = models.CharField(max_length=30)
slug = models.SlugField( default="cslug")
picture = models.FileField(upload_to="static/product_pics/")
parent = models.ForeignKey('self', blank=True,null=True,on_delete=models.CASCADE, related_name='children')
class Meta :
ordering = ('name', )
unique_together = ('slug', 'parent',)
verbose_name_plural = 'Categories'
def get_absolute_url(self):
return reverse('store:productlist', args=[])
def __str__(self):
full_path = [self.name]
k=self.parent
while k is not None:
full_path.append(k.name)
k=k.parent
return '->'.join(full_path[::-1])
文件.py
from django_elasticsearch_dsl import Document
from django_elasticsearch_dsl.registries import registry
from .models import Category, Brand, Product
@registry.register_document
class CategoryDocument(Document):
class Index:
name = 'categories'
settings = {'number_of_shards': 1,
'number_of_replicas': 0}
class Django:
model = Category
fields = [
'name',
]
解决方案
https://django-elasticsearch-dsl.readthedocs.io/en/latest/fields.html
问题是外键。Elasticsearch 不是一个关系数据库,所以你必须告诉它某种方式来存储你的 ForeignKey 数据
尝试
@registry.register_document
class CategoryDocument(Document):
parent = fields.ObjectField(properties={
'name': fields.TextField()
})
class Index:
name = 'categories'
settings = {'number_of_shards': 1,
'number_of_replicas': 0}
class Django:
model = Category
fields = [
'name',
]
related_models = [Category]
在这里,ForeignKey 数据存储为文本字段。
推荐阅读
- google-cloud-firestore - 在firestore函数中修改快照数据?
- typescript - 如何合并联合类型中所有对象的属性?
- mysql - 如何在where条件下多次使用相同的列
- emacs - Emacs screen tearing with mouse scroll
- python - BeautifulSoup 中用于 XML 解析的正则表达式
- excel - VBA 如何改进此代码并使其更高效?
- wordpress - How to create variable page title for a set of custom taxonomy pages
- python-3.x - Python 3 中未关闭的打开文件有什么问题?
- spring - 添加到 application.properties 后,Maven 构建失败
- javascript - Push value into object