Python 视图中的Django多态性
使用Django多态性,我有以下模型:Python 视图中的Django多态性,python,django,polymorphism,Python,Django,Polymorphism,使用Django多态性,我有以下模型: class Connection(models.Model): input = BaseInput() class BaseInput(PolymorphicModel): pass class ChildInput(BaseInput): name = 'child' 使用python控制台,由于Django多态性,执行BaseInput.objects.all()可以很好地自动解析为ChildInput 但是在视图.htm
class Connection(models.Model):
input = BaseInput()
class BaseInput(PolymorphicModel):
pass
class ChildInput(BaseInput):
name = 'child'
使用python控制台,由于Django多态性,执行BaseInput.objects.all()可以很好地自动解析为ChildInput
但是在视图.html文件中,我通过Connection.objects.all()使用for循环(在上下文中给出)。如果我尝试访问ChildInput对象,如下所示:
c.input
(其中c是for循环中的连接)
它解析为“BaseInput对象”
因此,多态可以在python解释器中工作,但不能在视图中工作
有什么想法吗
(Python 3.4.1、Django 1.7.3、Django多态0.6.1)
您需要将
input
更改为models.ForeignKey(BaseInput)
。这样,input
被添加为连接
模型上的数据库字段,而不仅仅是类上的属性 我认为这与控制台/视图无关,而是与.objects
和相关字段有关。要确认这一点,您能否在控制台中get()
aConnection
,然后在那里尝试c.input
?如果出现同样的问题,您可以发布完整的BaseInput
模型吗?我怀疑这是默认管理器的问题。在控制台中会发生这种情况:>>Connection.objects.all()[0]。输入
,但如果我这样做:>>BaseInput.objects.all()[]
好的,你能发布你的BaseInput
模型吗?实际上是这样的:类BaseInput(多态模型):传递
没有其他内容,我刚开始这个项目。BaseInput.\u default\u manager
或BaseInput.\u meta.\u default\u manager
的输出是什么(忘记了哪一个)?
class Connection(models.Model):
input = BaseInput()