派生的模型文件字段不可用

时间:2012-08-22 14:33:09

标签: django django-models django-inheritance

我有一个基础模型和派生模型。基本模型不是抽象的,因此它也有与之关联的表。

问题:我首先创建一个基本实例,然后创建派生实例。并将派生实例与基础相关联。但我在FileField的派生类中得到None,即使它已保存并在父级中可用。为什么这样?我错过了什么吗?

一些示例代码:

def get_filepath(instance):
     return u''+instance.name

def BaseModel(models.Model):
     name = models.CharField(max_length=50)
     filepath = models.FileField(upload_to=get_filepath,
            max_length=255, null=True)
     #some other fields

def DerivedModel(BaseModel):
     type = models.CharField(max_length=50, null=True, blank=True)

django shell上的示例:

>>> obj = BaseModel.objects.create(name='y')
>>> obj.id
56
>>> obj.save()
>>> obj.id
56
>>> nf=ContentFile("this is dummy text")
>>> obj.filepath.save('dummyfile', nf)
>>> dobj=DerivedModel()
>>> dobj.basemodel_ptr=obj
>>> dobj.save()
>>> dobj.id
56
>>> dobj.filepath
<FieldFile: None>
>>> obj.filepath
<FieldFile: y>

更新:@ dgel的回答:

  • save_base()是否保存派生对象? dobj之后没有得到身份。
  • dobj.save()之后,似乎基类中的属性被派生类中的属性覆盖。
  • 我在ctime中添加了BaseModel个创建时间,默认为datetime.datetime.utcnow。因此,一旦我保存派生对象,就会更新ctime以节省派生对象的时间。
  • 当我通过 sqlitebrowser 查看数据库时,filepath行的BaseModel字段为空。

>>> dobj.save_base(raw=True)
>>> dobj.id
>>> dobj.save()
>>> dobj.filepath
<FieldFile: None>
>>> obj.ctime
datetime.datetime(2012, 8, 23, 8, 50, 3, 171573)
>>> dobj.ctime
datetime.datetime(2012, 8, 23, 8, 51, 9, 946434)
>>> newdobj = DerivedModel.objects.get(id=dobj.id)
>>> newdobj.ctime
datetime.datetime(2012, 8, 23, 8, 51, 9, 946434)

感谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

dobj = DerivedModel()
dobj.basemodel_ptr=obj
dobj.save_base(raw=True)