Skip to main content
 首页 » 编程设计

python之View 中的 Django 多态性

2025年05月04日28Terrylee

我有以下模型,使用 Django Polymorphic:

class Connection(models.Model): 
    input = BaseInput() 
 
class BaseInput(PolymorphicModel): 
    pass 
 
class ChildInput(BaseInput): 
    name = 'child' 

由于 Django Polymorphic,使用 python 控制台,执行 BaseInput.objects.all() 可以很好地自动解析为 ChildInput。

但是在 .html 文件的 View 中,我通过 Connection.objects.all()(在上下文中给出)使用了一个 for 循环。如果我然后尝试像这样访问 ChildInput 对象:

c.input 

(其中c是for循环中的连接) 它解析为“BaseInput 对象”。

所以多态在 python 解释器中有效,但在 View 中无效。

有什么想法吗?

(Python 3.4.1,Django 1.7.3,Django 多态 0.6.1)

请您参考如下方法:

class Connection(models.Model): 
    input = BaseInput() 

您需要将 input 更改为 models.ForeignKey(BaseInput)。这样,input 将作为数据库字段添加到 Connection 模型中,而不仅仅是作为类的属性。