Django父模型和子类再次

时间:2014-01-09 09:55:39

标签: django django-models

说我有

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()

现在,我正在通过向基础Visualizer模型添加属性文本字段而不添加任何子类并将属性保持为json字符串。但是我对表格有困难......有更好的方法吗?

是子类化的选择吗? (但可以有5或10种类型的可视化器)

我需要一种正确的方法...

2 个答案:

答案 0 :(得分:1)

根据或您的要求“Django动态模型字段”可能是解决方案。见帖子 Django dynamic model fields

在继承方面,您可以使用专门的Forms

进行模型继承

这是“高级Django表单用法”http://www.slideshare.net/pydanny/advanced-django-forms-usage

和/或使用通用模型的表单继承 见帖子http://pydanny.com/overloading-form-fields.html

答案 1 :(得分:0)

子类化是最好的解决方案,在数据库中您将拥有1个表,所有可视化器包含基类的所有字段,每个子类有1个表,其id列与基类中的值相同,子类字段中的列。它是引擎盖下的一对一关系,但是当您保存子模型的新实例时,django将自动在基础模型中创建相应的字段。

更多信息:Django model interhitance