Allow make deep model copy
Project description
Django Duplicate
Django-Duplicate has an util tool for making a deep copy of django model instances
duplicate.utils.duplicate
Creates and returns a new object that is identical to instance
.
DuplicateMixin
Mixin for model classes which implements duplicate function as method.
from django.db import models
from duplicate.models import DuplicateMixin
class Book(DuplicateMixin, models.Model):
title = models.CharField(max_lenght=100)
author = models.ForegnKey('library.Author')
Let's duplicate (shallow copy) book instance:
book = Book(title='Two Scoops of Django')
boook.save()
book_copy = book.duplicate()
If you wanna do deep (related models gonna be shallow copied) copy use paths
argument of duplicate method. paths
should be list of relation paths:
book_copy = book.duplicate(paths=['author'])
To shallow copy every relation on some level use *
symbol:
book_copy = book.duplicate(paths=['*'])
author.*
path would copy also all author relations.
There is also symbol ~
which means "reference relations, but if reference object is duplicated in the context use it instead".
You can override fields like this(You cannot override nested m2m fields):
book_copy = book.duplicate(paths=['author'], override_fields={'author.name': 'Overriden author name'})
from duplicate.utils import CallableValue
book_copy = book.duplicate(paths=['author'], override_fields={'author.name': 'Overriden author name'})
You can also override nested fields with callable that takes instace on which you are overriding field as an argument:
from duplicate.utils import CallableValue
book_copy = book.duplicate(
paths=['author'],
override_fields={
'author.name': CallableValue(lambda author: 'Professional author name' if author.professional else 'Author name')
}
)
DJANGO_DUPLICATE_KNOWN_RELATIONS
To ensure that code is aware of all possible to duplicate models and relations path project should have setting DJANGO_DUPLICATE_KNOWN_RELATIONS
which is a dict with model labels as keys and list of model relations as value:
DJANGO_DUPLICATE_KNOWN_RELATIONS = {
"duplicate.Author": [
"book_set",
],
"duplicate.Book": [
"author",
],
}
This app enables check which will throw errors when state of app will not correspond to value of DJANGO_DUPLICATE_KNOWN_RELATIONS
.
License
The Django Wicked Historian package is licensed under the FreeBSD License.
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
Hashes for django_duplicate-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33abebae2ac39efbc3ea69858d38b6488afab737ab754340ad1be8ba488c0999 |
|
MD5 | 92a5a817f283f3cc509aea29ed4b5b9e |
|
BLAKE2b-256 | ec9ae2e8f0aba5d38130ba5ae03088eea39cb17602e004f0afb2662b467fb5dd |