5
私はdjangoモデルインスタンスをクローンするとき、私は 'pk'フィールドをきれいにしました。 これは、継承されたモデルでは動作しないようです。今、(私はDjangoのシェルを使用しています)のインスタンスを作成し、「通常の」方法でそれを複製してみましょう継承されたdjangoモデルインスタンスをクローン化
class ModelA(models.Model):
info1 = models.CharField(max_length=64)
class ModelB(ModelA):
info2 = models.CharField(max_length=64)
class ModelC(ModelB):
info3 = models.CharField(max_length=64)
:
これを取る私が見つけた唯一の方法が何をした
In [1]: c=ModelC(info1="aaa",info2="bbb",info3="ccc")
In [2]: c.save()
In [3]: c.pk
Out[3]: 1L
In [4]: c.pk=None <------ to clone
In [5]: c.save() <------ should generate a new instance with a new index key
In [6]: c.pk
Out[6]: 1L <------ but don't
In [7]: ModelC.objects.all()
Out[7]: [<ModelC: ModelC object>] (only one instance !)
:
In [16]: c.pk =None
In [17]: c.id=None
In [21]: c.modela_ptr_id=None
In [22]: c.modelb_ptr_id=None
In [23]: c.save()
In [24]: c.pk
Out[24]: 2L <---- successful clone containing info1,info2,info3 from original instance
In [25]: ModelC.objects.all()
Out[25]: [<ModelC: ModelC object>, <ModelC: ModelC object>]
私がいることを見つけます非常に醜いです、継承されたモデルからインスタンスを複製するより良い方法はありますか?
基本モデルを単独で使用しますか、またはそれらから継承するモデルのみを使用しますか?基本モデルを単独で使用する必要がない場合は、[抽象基本クラス](https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base)を使用する必要があります。 -クラス)。 –
実際にDjangoモデルの継承は悪い習慣とみなすことができます。抽象基本クラス、または外部キーを使用できます。 – PepperoniPizza
save()メソッドを貼り付けてください.PKをモデルにどのように設定していますか? – PepperoniPizza