2010-02-05 76 views
1

我想要的是接收建議來定義一個重用的產品模型,對於一個購物網站應用程序,現在我知道商店正在與「服裝」進行交易,所以產品模型將會有一個「季節或收藏「關係,但未來我應該使用該應用程序與X產品進行交易,例如:具有」機械規格「關係的」汽車「。如何編寫動態Django模型?

因此,我在元模型中思考,創建一個由鍵/值定義的通用模型,但是,如何建立關係?

但是,你是專家社區,我希望你能幫助我看到超越。

回答

3

定義一個對象與許多其他類型對象之間關係的一種方法是使用GenericForeignKeyContentType framework。我想你會找一個Product與一些更具體的相關對象,如Jacket。它可能是這個樣子:

class Product(models.Model): 
    price = models.FloatField() 
    description = models.TextField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    details = generic.GenericForeignKey('content_type', 'object_id') 

class Jacket(models.Model): 
    size = models.PositiveIntegerField() 
    color = models.CharField(max_length=25) 

這允許您定義任意數量的類似Jacket機型可與您的產品相關聯。

jacket = Jacket(size=69, color="pink") 
jacket.save() 
prod = Product(price=0.99) 
prod.details = jacket # It's like magic! 
prod.save() 

這確實創建創建噸模型的額外的工作,但它也可以讓你要非常有創意與您存儲哪些數據以及如何存儲。

+0

如果我們像這樣運行它:IntegrityError:(1048,「列'content_type_id'不能爲空」) – panchicore 2010-02-05 21:55:29

+0

您是對的。我沒有運行那麼一點代碼,並且命令關閉了。我已經修復它,以便它能正常工作。 – 2010-02-08 15:22:00

+0

謝謝傑克M.那又怎麼做呢? – panchicore 2010-02-08 19:40:22

0

一個流行的選項是使用類似標籤的東西。所以你會擁有所有商品通用的東西,比如商品ID,名稱,描述,價格。然後,您會在另一個表中添加更多通用標籤或描述的標籤,並與這些項目相關聯。你可以有代表季節的標籤,或者汽車規格等等......

當然,它的確依賴於你如何設計系統來處理附加信息。