2014-01-09 74 views
0

說我有Django的父模型和子類再次

class Visualizer(models.Model): 
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, editable=False, null=True, blank=True) 
    title = models.CharField(max_length=255) 
    description = models.TextField() 
    feed = models.ForeignKey(Feed) 
    channels = models.ManyToManyField(Channel) 

而且在我的項目可以有任意數量的展示臺,可以有額外的屬性... 像一個可視化工具可以有一個「base_color」額外屬性,併爲他人change_by_type「附加屬性...等等。如:

#there can be 5 to 10 visualizer types VisualizerA, VisualizerB ... 
    class VisualizerA(models.Model): 
      #base visualizer attributes 
      base_color = models.CharField() 

對於現在我通過增加一個屬性的文本字段基地展臺模型不加入任何的子類,並保持性能做json字符串。但是我的表現很艱難...有更好的方法嗎?

子類化的選擇? (但也有可能是5年或10種可視化的)

我需要這樣做的權利的一種方式......

回答

0

子類是海事組織最好的解決辦法,在數據庫中您將有1本表中所有領域的所有展示臺從基類和每個具有id列的子類的1個表中將具有與基類和子類字段中的列相同的值。它是一對一的關係,但是當您保存子模型的新實例時,django會自動在基礎模型中創建相應的字段。

這裏更多:Django model interhitance

1

視或您的要求「的Django動態模型領域」可能是解決方案。看帖子 Django dynamic model fields

在繼承方面,你可以有模式的繼承與專門的表格

這裏是「高級Django表單使用」 http://www.slideshare.net/pydanny/advanced-django-forms-usage

和/或形成的繼承與普通型號 看到張貼http://pydanny.com/overloading-form-fields.html

+1

高級Django表格用法http://www.slideshare.net/pydanny/advanced-django-forms-usage是一個有價值的文檔 – ratata