说我有
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种类型的可视化器)
我需要一种正确的方法...
答案 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将自动在基础模型中创建相应的字段。