Create a clone of a django model instance.
Project description
Python | Django | Downloads | Code Style |
---|---|---|---|
PyPI | Test | Vulnerabilities | Coverage | Code Quality | Pre-Commit |
---|---|---|---|---|---|
|
django-clone
Create copies of a model instance with explicit control on how the instance should be duplicated (limiting fields or related objects copied) with unique field detection.
This solves the problem introduced by using instance.pk = None
and instance.save()
which results in copying more object state than required.
Features
- 100% test coverage.
- More control over how a model instance should be duplicated
- Multi Database support i.e Create duplicates on one or more databases.
- Restrict fields used for creating a duplicate instance.
- Detects unique fields and naively adds a suffix
copy {count}
to each duplicate instance (for supported fields only). - Optionally differentiate between a duplicate instance and the original by appending a copy suffix to non unique fields (for supported fields only).
Table of Contents
- Installation
- Usage
- Advanced Usage
- Compatibility
- Running locally
- Found a Bug?
- Contributors ✨
Installation
pip
pip install django-clone
poetry
poetry add django-clone
Usage
Subclassing the CloneModel
Using the CloneMixin
Duplicating a model instance
Bulk cloning a model
Creating clones without subclassing CloneMixin
.
NOTE: :warning:
- This method won't copy over related objects like Many to Many/One to Many relationships.
- Ensure that required fields skipped from being cloned are passed in using the
attrs
kwargs.
CloneMixin attributes
Attribute | Description |
---|---|
DUPLICATE_SUFFIX |
Suffix to append to duplicates (NOTE: This requires USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS to be enabled and supports string fields). |
USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS |
Enable appending the DUPLICATE_SUFFIX to new cloned instances. |
UNIQUE_DUPLICATE_SUFFIX |
Suffix to append to unique fields |
USE_UNIQUE_DUPLICATE_SUFFIX |
Enable appending the UNIQUE_DUPLICATE_SUFFIX to new cloned instances. |
MAX_UNIQUE_DUPLICATE_QUERY_ATTEMPTS |
The max query attempt while generating unique values for a case of unique conflicts. |
Explicit (include only these fields)
Attribute | Description |
---|---|
_clone_fields |
Restrict the list of fields to copy from the instance (By default: Copies all fields excluding auto-created/non editable model fields) |
_clone_m2m_fields |
Restricted Many to many fields (i.e Test.tags) |
_clone_m2o_or_o2m_fields |
Restricted Many to One/One to Many fields |
_clone_o2o_fields |
Restricted One to One fields |
_clone_linked_m2m_fields |
Restricted Many to Many fields that should be linked to the new instance |
Implicit (include all except these fields)
Attribute | Description |
---|---|
_clone_excluded_fields |
Excluded model fields. |
_clone_excluded_m2m_fields |
Excluded many to many fields. |
_clone_excluded_m2o_or_o2m_fields |
Excluded Many to One/One to Many fields. |
_clone_excluded_o2o_fields |
Excluded one to one fields. |
NOTE: :warning:
- Ensure to either set
_clone_excluded_*
or_clone_*
. Using both would raise errors.
Django Admin
Duplicating Models from the Django Admin view.
List View
Change View
CloneModelAdmin class attributes
NOTE: :warning:
- Ensure that
model_clone
is placed beforedjango.contrib.admin
INSTALLED_APPS = [
'model_clone',
'django.contrib.admin',
'...',
]
Advanced Usage
Signals
pre_clone_save, post_clone_save
Clone Many to Many fields
Using the CloneModel
Using the CloneMixin
Multi database support
Compatibility
Python | Supported version |
---|---|
Python2.x | <=2.5.3 |
Python3.5 | <=2.9.6 |
Python3.6+ | All versions |
Django | Supported version |
---|---|
1.11 | <=2.7.2 |
2.x | All versions |
3.x | All versions |
Running locally
$ git clone git@github.com:tj-django/django-clone.git
$ make default-user
$ make run
Spins up a django server running the demo app.
Visit http://127.0.0.1:8000
Found a Bug?
To file a bug or submit a patch, please head over to django-clone on github.
If you feel generous and want to show some extra appreciation:
Support me with a :star:
Contributors ✨
Thanks goes to these wonderful people:
Gerben Neven 🐛 ⚠️ 💻 |
Sebastian Kapunkt 💻 🐛 ⚠️ |
Andrés Portillo 🐛 |
WhiteSource Renovate 🚧 |
Yuekui 💻 🐛 ⚠️ 📖 🚧 |
Take Weiland ⚠️ 🐛 💻 |
Patrick 🐛 💻 |
Amiel Kollek 💻 🐛 ⚠️ |
Eric Theise 📖 |
Daniel Schaffer 💻 ⚠️ |
This project follows the all-contributors specification. Contributions of any kind welcome!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-clone-5.3.2.tar.gz
.
File metadata
- Download URL: django-clone-5.3.2.tar.gz
- Upload date:
- Size: 31.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d379ee1fb2d9e9cfd7ccd06f9cc14ad43d5d3df8ab71a9808b30ec6189ce88e9 |
|
MD5 | 0680baed5faa37be43c6125324283040 |
|
BLAKE2b-256 | 44b7f49a636ed2f7680d638ffc450ce6beeb7820f75b691e9969460b5a9abb68 |
File details
Details for the file django_clone-5.3.2-py3-none-any.whl
.
File metadata
- Download URL: django_clone-5.3.2-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.7.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5680269bb3796aa09c6a5711ec3ecd8e03a5b68386f9a1940e4b735e68b076c1 |
|
MD5 | f7ce25083653eae2250df17bafb0d18f |
|
BLAKE2b-256 | 5857ae7d6bae4d3aab70c0d4cbe2978db6c4892c41e02b0741893337063a9502 |