我有一个解决方案,我认为我可以照顾模型继承,但是现在再来看一下,它实际上并不能解决我的问题。我希望能够调用一个模型,然后让我可以访问子模型的字段。对于继承,我仍然必须将子模型名称放在命令行中,这会破坏整个目的。这是我想要的示例:
class LessonModule(models.Model): lesson = models.ForeignKey('Lesson') name = models.CharField(max_length=100, blank=True) class ProfileImage(LessonModule): file_loc = models.ImageField(upload_to="profiles/") detail_file_loc = models.ImageField(upload_to="profiles/", blank=True) def render(self): t = loader.get_template("template/profile_image.html") c = Context({'image_path': self.file_loc.url}) return t.render(c) def __unicode__(self): return '[prof: %d]' % self.id class Note(LessonModule): def __unicode__(self): return '[note: %d]' % self.id def render(self): return self.id
我想做的是:
module = LessonModule.objects.get(pk=20) module.render()
并使其运行相应的渲染功能。例如,如果pk与Note模型对齐,则它将仅返回self.id。当然,这简化为我要使用这些功能执行的操作。
我不必使用模型继承。看起来这是最好的方法。我只希望中心区域查找所有可能的模块。
我还将使用它从LessonModule中的课程外键中拉出所有分配给Lesson的LessonModule。
我没有用过,但是这个项目看起来像您想要的:https : //code.google.com/p/django-polymorphic- models/
您可以请求LessonModule.objects.all(),然后将.downcast()每个对象自动添加到ProfileImage或Note中。
或将PolymorphicMetaclass添加到LessonModule中,以始终从查询集中检索ProfileImage和Note对象。
请注意额外查询的成本… Django模型中的多态性是通过表联接而不是纯python代码完成的。