|
4 | 4 |
|
5 | 5 | from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
|
6 | 6 | from django.db import DEFAULT_DB_ALIAS, DatabaseError, connections, models
|
7 |
| -from django.db.models.manager import BaseManager |
8 | 7 | from django.db.models.query import MAX_GET_RESULTS, EmptyQuerySet
|
9 | 8 | from django.test import (
|
10 |
| - SimpleTestCase, |
11 | 9 | TestCase,
|
12 | 10 | TransactionTestCase,
|
13 | 11 | skipUnlessDBFeature,
|
14 | 12 | )
|
15 | 13 | from django.utils.translation import gettext_lazy
|
16 | 14 |
|
17 |
| -from clickhouse_backend import compat |
18 | 15 | from .models import (
|
19 | 16 | Article,
|
20 | 17 | ArticleSelectOnSave,
|
21 | 18 | ChildPrimaryKeyWithDefault,
|
22 | 19 | FeaturedArticle,
|
23 | 20 | PrimaryKeyWithDefault,
|
24 | 21 | SelfRef,
|
| 22 | + DjangoArticle |
25 | 23 | )
|
26 | 24 |
|
27 | 25 |
|
@@ -632,12 +630,12 @@ def deleter():
|
632 | 630 | class SelectOnSaveTests(TestCase):
|
633 | 631 | def test_select_on_save(self):
|
634 | 632 | a1 = Article.objects.create(pub_date=datetime.now())
|
635 |
| - with self.assertNumQueries(3): |
| 633 | + with self.assertNumQueries(1): |
636 | 634 | a1.save()
|
637 | 635 | asos = ArticleSelectOnSave.objects.create(pub_date=datetime.now())
|
638 |
| - with self.assertNumQueries(3): |
| 636 | + with self.assertNumQueries(1): |
639 | 637 | asos.save()
|
640 |
| - with self.assertNumQueries(3): |
| 638 | + with self.assertNumQueries(1): |
641 | 639 | asos.save(force_update=True)
|
642 | 640 | Article.objects.all().delete()
|
643 | 641 | with self.assertRaisesMessage(
|
@@ -671,7 +669,7 @@ def _update(self, *args, **kwargs):
|
671 | 669 | try:
|
672 | 670 | Article._base_manager._queryset_class = FakeQuerySet
|
673 | 671 | asos = ArticleSelectOnSave.objects.create(pub_date=datetime.now())
|
674 |
| - with self.assertNumQueries(3): |
| 672 | + with self.assertNumQueries(2): |
675 | 673 | asos.save()
|
676 | 674 | self.assertTrue(FakeQuerySet.called)
|
677 | 675 | finally:
|
@@ -808,3 +806,17 @@ def test_prefetched_cache_cleared(self):
|
808 | 806 | a2_prefetched.refresh_from_db(fields=["selfref_set"])
|
809 | 807 | # Cache was cleared and new results are available.
|
810 | 808 | self.assertCountEqual(a2_prefetched.selfref_set.all(), [s])
|
| 809 | + |
| 810 | + |
| 811 | +class DjangoModelTests(TestCase): |
| 812 | + def test_saving_an_object_again_does_not_create_a_new_object(self): |
| 813 | + a = DjangoArticle(headline="original", pub_date=datetime(2014, 5, 16)) |
| 814 | + a.save() |
| 815 | + current_id = a.id |
| 816 | + |
| 817 | + a.save() |
| 818 | + self.assertEqual(a.id, current_id) |
| 819 | + |
| 820 | + a.headline = "Updated headline" |
| 821 | + a.save() |
| 822 | + self.assertEqual(a.id, current_id) |
0 commit comments