KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
When I clone a django model instance I used to clean the 'pk' field. This seems not to work with an inherited model : Take this : 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) Now let's create an instance and clone it by the 'usual' way ( I am using a django shell ): 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 !) The only way I found was to do : 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>] I find that very ugly, is there a more nice way to clone an instance from an inherited model ?
Tags (comma-separated)
Save Edits
Cancel