Skip to main content

Safes a complete tree of django models - from bottom to top.

Project description

save_deep

This package first saves all the children of the given oject and then the object itself. It solves the error: ValueError: save() prohibited to prevent data loss due to unsaved related object '<<foreign_object>>'.

Note: it does not work (yet) with circular dependencies

Example

Say you have this this model

class Company(models.Model):
    name = models.CharField(max_length=256)

class Employee(models.Model):
    username = models.CharField(max_length=256)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)

If you try to do

Employee(username='tom', company=Company(name='some-name')).save()

you get

ValueError: save() prohibited to prevent data loss due to unsaved related object '<<foreign_object>>'.

But if you use save_deep, the company is saved first, then the employee

employee = save_deep(Employee(username='tom', company=Company(name='some-name')))

This works with a deeply nested object-tree and with updates (and update/create-mixes) as well as long as there are no circular dependencies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_save_deep-0.0.2.tar.gz (6.3 kB view hashes)

Uploaded Source

Built Distribution

django_save_deep-0.0.2-py3-none-any.whl (7.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page