首先,額外的屬性,我非常非常新到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。看起來不錯。隨意發佈它作爲答案。 –