0

ベースモデルとそこから派生したモデルがあります。基本モデルは抽象的ではないため、テーブルも関連付けられています。

問題 : 最初に基本インスタンスを作成し、次に派生インスタンスを作成します。そして、派生インスタンスをベースに関連付けます。しかし、親で保存されて利用可能であっても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 シェルのサンプル:

>>> 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その後、id を取得しません。
  • その後dobj.save()、基本クラスの属性が派生クラスの属性によって上書きされているようです。
  • デフォルトctimeで作成時間を追加しました。したがって、派生オブジェクトを保存すると、派生オブジェクトの時間を節約するために更新されます。BaseModeldatetime.datetime.utcnowctime
  • sqlitebrowserでDB を見ると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)

ありがとう。

4

1 に答える 1

1

これを試して:

dobj = DerivedModel()
dobj.basemodel_ptr=obj
dobj.save_base(raw=True)
于 2012-08-22T14:36:50.413 に答える