Django model field used to store snapshot of data.
Project description
Django Frozen Data
Django model custom field for storing a frozen snapshot of an object.
Principles
- Behaves like a
ForeignKey
but the data is detached from the related object - Transparent to the client - it looks and behaves like the original object
- The frozen object cannot be resaved
- Supports nesting of objects
Usage
A frozen field can be declared like a ForeignKey
:
class Foo:
frozen_bar = FrozenObjectField(Bar, help_text="This is a frozen snapshot of the object.")
fresh_bar = ForeignKey(Bar, help_text="This is a live FK relationship.")
The field behaves exactly like a FK, with the exception that the object cannot be saved:
>>> bar = Bar()
>>> foo = Foo.objects.create(frozen_bar=bar, fresh_bar=bar)
>>> # the fresh field can be updated as you would expect
>>> foo.fresh_bar.save()
>>> # the frozen field cannot - to prevent overwriting new data.
>>> foo.frozen_bar.save()
>>> StaleObjectError: 'Object was frozen; defrosted objects cannot be saved.'
Issues - TODO
- Deserialization of DateField/DateTimeField values
- Deserialization of DecimalField values
- Deserialization of UUIDField values
- Deep object freezing
Running tests
The tests themselves use pytest
as the test runner. If you have installed the poetry
evironment, you can run them thus:
$ poetry run pytest
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
Close
Hashes for djang_frozen_data-0.1a1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b43b1748fcddc229bac20f146e02cffe350369a14aa58ed69a135ffa9cf66dda |
|
MD5 | ad47b83370b93c9de769a28f33cf4fdc |
|
BLAKE2b-256 | f8db4ab298fe8a305a1d54b86026e48f23d188f967058cfd9ec010d2a01a84b8 |