Author: kmtracey Date: 2011-11-12 11:06:39 -0800 (Sat, 12 Nov 2011) New Revision: 17088
Modified: django/trunk/AUTHORS django/trunk/django/db/models/base.py django/trunk/tests/modeltests/force_insert_update/models.py django/trunk/tests/modeltests/force_insert_update/tests.py Log: Fix #13864: Removed database error raised when force_update is requsted on save of an inherited model with no fields of its own. Thanks fva, gregmuellegger, and markb1. Modified: django/trunk/AUTHORS =================================================================== --- django/trunk/AUTHORS 2011-11-12 18:50:50 UTC (rev 17087) +++ django/trunk/AUTHORS 2011-11-12 19:06:39 UTC (rev 17088) @@ -87,6 +87,7 @@ Julian Bez Arvis Bickovskis <viestards.li...@gmail.com> Natalia Bidart <nataliabid...@gmail.com> + Mark Biggers <bigg...@utsl.com> Paul Bissex <http://e-scribe.com/> Simon Blanchard David Blewett <da...@dawninglight.net> Modified: django/trunk/django/db/models/base.py =================================================================== --- django/trunk/django/db/models/base.py 2011-11-12 18:50:50 UTC (rev 17087) +++ django/trunk/django/db/models/base.py 2011-11-12 19:06:39 UTC (rev 17088) @@ -526,9 +526,10 @@ # It does already exist, so do an UPDATE. if force_update or non_pks: values = [(f, None, (raw and getattr(self, f.attname) or f.pre_save(self, False))) for f in non_pks] - rows = manager.using(using).filter(pk=pk_val)._update(values) - if force_update and not rows: - raise DatabaseError("Forced update did not affect any rows.") + if values: + rows = manager.using(using).filter(pk=pk_val)._update(values) + if force_update and not rows: + raise DatabaseError("Forced update did not affect any rows.") else: record_exists = False if not pk_set or not record_exists: Modified: django/trunk/tests/modeltests/force_insert_update/models.py =================================================================== --- django/trunk/tests/modeltests/force_insert_update/models.py 2011-11-12 18:50:50 UTC (rev 17087) +++ django/trunk/tests/modeltests/force_insert_update/models.py 2011-11-12 19:06:39 UTC (rev 17088) @@ -9,6 +9,16 @@ name = models.CharField(max_length = 10) value = models.IntegerField() +class InheritedCounter(Counter): + tag = models.CharField(max_length=10) + +class ProxyCounter(Counter): + class Meta: + proxy = True + +class SubCounter(Counter): + pass + class WithCustomPK(models.Model): name = models.IntegerField(primary_key=True) value = models.IntegerField() Modified: django/trunk/tests/modeltests/force_insert_update/tests.py =================================================================== --- django/trunk/tests/modeltests/force_insert_update/tests.py 2011-11-12 18:50:50 UTC (rev 17087) +++ django/trunk/tests/modeltests/force_insert_update/tests.py 2011-11-12 19:06:39 UTC (rev 17088) @@ -3,14 +3,15 @@ from django.db import transaction, IntegrityError, DatabaseError from django.test import TestCase -from .models import Counter, WithCustomPK +from .models import (Counter, WithCustomPK, InheritedCounter, ProxyCounter, + SubCounter) class ForceTests(TestCase): def test_force_update(self): c = Counter.objects.create(name="one", value=1) + # The normal case - c.value = 2 c.save() # Same thing, via an update @@ -38,3 +39,25 @@ # the data isn't in the database already. obj = WithCustomPK(name=1, value=1) self.assertRaises(DatabaseError, obj.save, force_update=True) + + +class InheritanceTests(TestCase): + def test_force_update_on_inherited_model(self): + a = InheritedCounter(name="count", value=1, tag="spam") + a.save() + a.save(force_update=True) + + def test_force_update_on_proxy_model(self): + a = ProxyCounter(name="count", value=1) + a.save() + a.save(force_update=True) + + def test_force_update_on_inherited_model_without_fields(self): + ''' + Issue 13864: force_update fails on subclassed models, if they don't + specify custom fields. + ''' + a = SubCounter(name="count", value=1) + a.save() + a.value = 2 + a.save(force_update=True) -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.