首先,额外的属性,我非常非常新到Python/Django的,但我已经使用其他技术多年。Python的继承或小面
在一个网站,用户可以创建出版物(我们认为亚马逊的举例),我有一个Publication
对象,它包含了基本的东西,如标题,详细信息,价格等
我想要的,但是,包括特定物体类型的特定属性(布料的尺寸,颜色,男性/女性;汽车将具有品牌,型号,发动机,变速箱等)。这个想法是使用Haystack/Elasticsearch在这些属性上进行切面,这取决于用户正在搜索的内容。
所以,这里的基本模式:
# main publication class
class Publication(models.Model):
OBJECT_TYPE = (
('cloth', 'Cloth'),
('electronics', 'Electronics'),
('car', 'Cars'),
)
object_type = models.CharField(max_length=30,
choices=OBJECT_TYPE,
default='electronics')
title = models.CharField()
details = models.CharField()
# other fields...
# Haystack index
class PublicationIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
object_type = indexes.CharField(faceted=True, model_attr='object_type')
# other fields...
的问题是,我应该在哪里存储这些其他属性?
一个办法是有一个与细节和FK的出版另一个类/模型。如果是这样,那么我应该如何构建索引呢?另一种选择是将所有出版物的所有属性放在Publication
模型中,这将是最简单但可能不优雅的。
另一种选择是做继承有CarPublication
,ClothPublication
等。如果是这样,问题是,我该如何处理基本的东西,以避免为每个发布类型重复所有的屏幕。
我将只有3出版物类型,我不认为我会添加更多,这样做的继承,例如,是一个可行的选项(亚马逊拥有数百个类别,因此它是不同的)。
什么是最好的方法?
仅供参考,使用Python 3,Django的1.9,2.5草堆-dev的,Elasticsearch。
[django-polymorphic](https://github.com/chrisglass/django_polymorphic)处理这个美丽 –
谢谢@IanPrice。看起来不错。随意发布它作为答案。 –