diff options
Diffstat (limited to 'tests/modeltests/force_insert_update')
| -rw-r--r-- | tests/modeltests/force_insert_update/__init__.py | 0 | ||||
| -rw-r--r-- | tests/modeltests/force_insert_update/models.py | 62 |
2 files changed, 62 insertions, 0 deletions
diff --git a/tests/modeltests/force_insert_update/__init__.py b/tests/modeltests/force_insert_update/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/modeltests/force_insert_update/__init__.py diff --git a/tests/modeltests/force_insert_update/models.py b/tests/modeltests/force_insert_update/models.py new file mode 100644 index 0000000000..feffed5faf --- /dev/null +++ b/tests/modeltests/force_insert_update/models.py @@ -0,0 +1,62 @@ +""" +Tests for forcing insert and update queries (instead of Django's normal +automatic behaviour). +""" +from django.db import models + +class Counter(models.Model): + name = models.CharField(max_length = 10) + value = models.IntegerField() + +class WithCustomPK(models.Model): + name = models.IntegerField(primary_key=True) + value = models.IntegerField() + +__test__ = {"API_TESTS": """ +>>> c = Counter.objects.create(name="one", value=1) + +# The normal case +>>> c.value = 2 +>>> c.save() + +# Same thing, via an update +>>> c.value = 3 +>>> c.save(force_update=True) + +# Won't work because force_update and force_insert are mutually exclusive +>>> c.value = 4 +>>> c.save(force_insert=True, force_update=True) +Traceback (most recent call last): +... +ValueError: Cannot force both insert and updating in model saving. + +# Try to update something that doesn't have a primary key in the first place. +>>> c1 = Counter(name="two", value=2) +>>> c1.save(force_update=True) +Traceback (most recent call last): +... +ValueError: Cannot force an update in save() with no primary key. + +>>> c1.save(force_insert=True) + +# Won't work because we can't insert a pk of the same value. +>>> c.value = 5 +>>> c.save(force_insert=True) +Traceback (most recent call last): +... +IntegrityError: ... + +# Work around transaction failure cleaning up for PostgreSQL. +>>> from django.db import connection +>>> connection.close() + +# Trying to update should still fail, even with manual primary keys, if the +# data isn't in the database already. +>>> obj = WithCustomPK(name=1, value=1) +>>> obj.save(force_update=True) +Traceback (most recent call last): +... +DatabaseError: ... + +""" +} |
