一尘不染

Django Model继承查询中央表

python

我有一个解决方案,我认为我可以照顾模型继承,但是现在再来看一下,它实际上并不能解决我的问题。我希望能够调用一个模型,然后让我可以访问子模型的字段。对于继承,我仍然必须将子模型名称放在命令行中,这会破坏整个目的。这是我想要的示例:

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。


阅读 182

收藏
2021-01-20

共1个答案

一尘不染

我没有用过,但是这个项目看起来像您想要的:https :
//code.google.com/p/django-polymorphic-
models/

您可以请求LessonModule.objects.all(),然后将.downcast()每个对象自动添加到ProfileImage或Note中。

或将PolymorphicMetaclass添加到LessonModule中,以始终从查询集中检索ProfileImage和Note对象。

请注意额外查询的成本… Django模型中的多态性是通过表联接而不是纯python代码完成的。

2021-01-20