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
Using the CloneModel
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
attrskwargs.
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_cloneis placed beforedjango.contrib.admin
INSTALLED_APPS = [
'model_clone',
'django.contrib.admin',
'...',
]
Advanced Usage
Signals
pre_clone_save, post_clone_save
Multi-database support
Compatibility
| Python | Supported version |
|---|---|
| Python2.x | <=2.5.3 |
| Python3.5 | <=2.9.6 |
| Python3.6+ | <=5.3.3 |
| Python3.7+ | All versions |
| Django | Supported version |
|---|---|
| 1.11 | <=2.7.2 |
| 2.x | All versions |
| 3.x | All versions |
| 4.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:
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_clone-5.5.0.tar.gz.
File metadata
- Download URL: django_clone-5.5.0.tar.gz
- Upload date:
- Size: 32.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93c991dc81d67b762f46362e09b2521c54d93662637bd5f862c7adaf9f80897a
|
|
| MD5 |
1a7f65dcef2ff63b524a9872fbdd8eaa
|
|
| BLAKE2b-256 |
27c9d63b882ceef6106726af3f2ae936d443bd454c4e5ba95b4bc6ba1c32f59c
|
File details
Details for the file django_clone-5.5.0-py3-none-any.whl.
File metadata
- Download URL: django_clone-5.5.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
707aac2ebc3962690b6f6f6866833c8ab36798257d7f36221cf52296fbf3f0e0
|
|
| MD5 |
3d815798a4b9fdb1ce2b9615576a7391
|
|
| BLAKE2b-256 |
b219c63ba450c9b483540f6b83e8ba2e7b5c404f23bcbe48737ad3cc6f1c9f67
|