Django’s ORM is top notch. It provides facilities to do almost anything you can think of with a database, and if it doesn’t, it still lets you execute arbitrary SQL to your hearts content. I’ve been developing Django for close to 2 years now, and still discover facets of it that I never knew existed. For instance, I had a need to duplicate a row in a table, but give it a different primary key. After a quick Google search, I discovered that Django allows you to do the following to copy instantiated model objects.
my_model = MyModel.objects.get(pk=4) my_model.id = None my_model.save() |
There are a few caveats with doing things this way.
- Unique Constraints – If you have any unique constraints on the model, the save will not pass validation and fail.
- ManyToMany Fields – If you need new copies of ManyToMany field values, you’ll need to handle this yourself.
That being said, in many cases duplicating a model instance is as easy as changing it’s ID and saving.