Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ answer newbie questions, and generally made Django that much better:
Aryeh Leib Taurog <http://www.aryehleib.com/>
A S Alam <aalam@users.sf.net>
Asif Saif Uddin <auvipy@gmail.com>
Aslan Osmanov <osmnvaslan@gmail.com>
atlithorn <atlithorn@gmail.com>
Audrey Roy <http://audreymroy.com/>
av0000@mail.ru
Expand Down
3 changes: 2 additions & 1 deletion django/urls/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ def _path(route, view, kwargs=None, name=None, Pattern=None):
)
else:
raise TypeError(
"view must be a callable or a list/tuple in the case of include()."
"view must be a callable or a list/tuple in the case of "
f"include(), but got {view.__class__.__name__}."
)


Expand Down
10 changes: 7 additions & 3 deletions tests/admin_utils/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ class Cascade(models.Model):
num = models.PositiveSmallIntegerField()
parent = models.ForeignKey("self", models.CASCADE, null=True)

class Meta:
ordering = ("num",)

@admin.display(ordering="num")
def __str__(self):
return str(self.num)
Expand All @@ -56,12 +59,13 @@ class DBCascade(models.Model):
num = models.PositiveSmallIntegerField()
parent = models.ForeignKey("self", models.DB_CASCADE, null=True)

def __str__(self):
return str(self.num)

class Meta:
ordering = ("num",)
required_db_features = {"supports_on_delete_db_cascade"}

def __str__(self):
return str(self.num)


class Event(models.Model):
date = models.DateTimeField(auto_now_add=True)
Expand Down
4 changes: 2 additions & 2 deletions tests/admin_views/test_autocomplete_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ class PKOrderingQuestionAdmin(QuestionAdmin):
{
"results": [
{"id": str(q.pk), "text": q.question}
for q in Question.objects.all()[:PAGINATOR_SIZE]
for q in Question.objects.order_by("pk")[:PAGINATOR_SIZE]
],
"pagination": {"more": True},
},
Expand All @@ -359,7 +359,7 @@ class PKOrderingQuestionAdmin(QuestionAdmin):
{
"results": [
{"id": str(q.pk), "text": q.question}
for q in Question.objects.all()[PAGINATOR_SIZE:]
for q in Question.objects.order_by("pk")[PAGINATOR_SIZE:]
],
"pagination": {"more": False},
},
Expand Down
2 changes: 1 addition & 1 deletion tests/composite_pk/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def test_in_bulk_batching(self):
id_list = list(Comment.objects.values_list("pk", flat=True))
with self.assertNumQueries(2):
comment_dict = Comment.objects.in_bulk(id_list=id_list)
self.assertQuerySetEqual(comment_dict, id_list)
self.assertCountEqual(comment_dict, id_list)

def test_in_bulk_values(self):
result = Comment.objects.values().in_bulk([self.comment.pk])
Expand Down
10 changes: 7 additions & 3 deletions tests/defer/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ def test_defer_values_does_not_defer(self):
# User values() won't defer anything (you get the full list of
# dictionaries back), but it still works.
self.assertEqual(
Primary.objects.defer("name").values()[0],
Primary.objects.defer("name").values().get(pk=self.p1.pk),
{
"id": self.p1.id,
"name": "p1",
Expand All @@ -115,7 +115,7 @@ def test_defer_values_does_not_defer(self):

def test_only_values_does_not_defer(self):
self.assertEqual(
Primary.objects.only("name").values()[0],
Primary.objects.only("name").values().get(pk=self.p1.pk),
{
"id": self.p1.id,
"name": "p1",
Expand All @@ -138,7 +138,11 @@ def test_defer_with_select_related(self):
self.assert_delayed(obj, 0)

def test_only_with_select_related(self):
obj = Primary.objects.select_related("related").only("related__first")[0]
obj = (
Primary.objects.select_related("related")
.only("related__first")
.get(pk=self.p1.pk)
)
self.assert_delayed(obj, 2)
self.assert_delayed(obj.related, 1)
self.assertEqual(obj.related_id, self.s1.pk)
Expand Down
2 changes: 1 addition & 1 deletion tests/expressions/test_queryset_values.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def setUpTestData(cls):

def test_values_expression(self):
self.assertSequenceEqual(
Company.objects.values(salary=F("ceo__salary")),
Company.objects.values(salary=F("ceo__salary")).order_by("salary"),
[{"salary": 10}, {"salary": 20}, {"salary": 30}],
)

Expand Down
4 changes: 2 additions & 2 deletions tests/expressions/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ def test_ticket_16731_startswith_lookup(self):
Employee.objects.create(firstname="John", lastname="Doe")
e2 = Employee.objects.create(firstname="Jack", lastname="Jackson")
e3 = Employee.objects.create(firstname="Jack", lastname="jackson")
self.assertSequenceEqual(
self.assertCountEqual(
Employee.objects.filter(lastname__startswith=F("firstname")),
[e2, e3] if connection.features.has_case_insensitive_like else [e2],
)
Expand Down Expand Up @@ -813,7 +813,7 @@ def test_nested_subquery_join_outer_ref(self):
),
)
self.assertSequenceEqual(
qs.values_list("ceo_company", flat=True),
qs.order_by("pk").values_list("ceo_company", flat=True),
[self.example_inc.pk, self.foobar_ltd.pk, self.gmbh.pk],
)

Expand Down
8 changes: 4 additions & 4 deletions tests/foreign_object/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -494,8 +494,8 @@ def test_translations(self):
# Test model initialization with active_translation field.
a3 = Article(id=a3.id, pub_date=a3.pub_date, active_translation=at3_en)
a3.save()
self.assertEqual(
list(Article.objects.filter(active_translation__abstract=None)), [a1, a3]
self.assertCountEqual(
Article.objects.filter(active_translation__abstract=None), [a1, a3]
)
self.assertEqual(
list(
Expand All @@ -508,8 +508,8 @@ def test_translations(self):
)

with translation.override("en"):
self.assertEqual(
list(Article.objects.filter(active_translation__abstract=None)),
self.assertCountEqual(
Article.objects.filter(active_translation__abstract=None),
[a1, a2],
)

Expand Down
3 changes: 1 addition & 2 deletions tests/generic_relations/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -844,8 +844,7 @@ def test_fetch_mode_copied_reverse_fetching_one(self):
self.assertEqual(tag._state.fetch_mode, FETCH_PEERS)

def test_fetch_mode_copied_reverse_fetching_many(self):
animals = list(Animal.objects.fetch_mode(FETCH_PEERS))
animal = animals[0]
animal = Animal.objects.fetch_mode(FETCH_PEERS).get(pk=self.lion.pk)
self.assertEqual(animal._state.fetch_mode, FETCH_PEERS)
tags = list(animal.tags.all())
tag = tags[0]
Expand Down
4 changes: 2 additions & 2 deletions tests/generic_relations_regress/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,10 @@ def test_ticket_20378(self):
self.assertSequenceEqual(HasLinkThing.objects.filter(links=l1), [hs3])
self.assertSequenceEqual(HasLinkThing.objects.filter(links=l2), [hs4])
self.assertSequenceEqual(
HasLinkThing.objects.exclude(links=l2), [hs1, hs2, hs3]
HasLinkThing.objects.exclude(links=l2).order_by("pk"), [hs1, hs2, hs3]
)
self.assertSequenceEqual(
HasLinkThing.objects.exclude(links=l1), [hs1, hs2, hs4]
HasLinkThing.objects.exclude(links=l1).order_by("pk"), [hs1, hs2, hs4]
)

def test_ticket_20564(self):
Expand Down
5 changes: 3 additions & 2 deletions tests/known_related_objects/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,12 @@ def test_multilevel_reverse_fk_cyclic_select_related(self):

def test_multilevel_reverse_fk_select_related(self):
with self.assertNumQueries(2):
p = list(
p = (
Tournament.objects.filter(id=self.t2.id)
.annotate(
style=FilteredRelation("pool__another_style"),
)
.select_related("style")
.filter(style__isnull=False)
)
self.assertEqual(p[0].style.another_pool, self.p3)
self.assertEqual(p.get().style.another_pool, self.p3)
12 changes: 7 additions & 5 deletions tests/m2m_recursive/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,19 @@ def test_recursive_m2m_all(self):
(self.d, [self.a, self.c]),
):
with self.subTest(person=person):
self.assertSequenceEqual(person.friends.all(), friends)
self.assertSequenceEqual(person.friends.order_by("name"), friends)

def test_recursive_m2m_reverse_add(self):
# Add m2m for Anne in reverse direction.
self.b.friends.add(self.a)
self.assertSequenceEqual(self.a.friends.all(), [self.b, self.c, self.d])
self.assertSequenceEqual(
self.a.friends.order_by("name"), [self.b, self.c, self.d]
)
self.assertSequenceEqual(self.b.friends.all(), [self.a])

def test_recursive_m2m_remove(self):
self.b.friends.remove(self.a)
self.assertSequenceEqual(self.a.friends.all(), [self.c, self.d])
self.assertSequenceEqual(self.a.friends.order_by("name"), [self.c, self.d])
self.assertSequenceEqual(self.b.friends.all(), [])

def test_recursive_m2m_clear(self):
Expand Down Expand Up @@ -94,7 +96,7 @@ def test_recursive_m2m_all(self):
(self.d, [self.a, self.c]),
):
with self.subTest(person=person):
self.assertSequenceEqual(person.colleagues.all(), colleagues)
self.assertSequenceEqual(person.colleagues.order_by("name"), colleagues)

def test_recursive_m2m_reverse_add(self):
# Add m2m for Anne in reverse direction.
Expand All @@ -109,7 +111,7 @@ def test_recursive_m2m_reverse_add(self):

def test_recursive_m2m_remove(self):
self.b.colleagues.remove(self.a)
self.assertSequenceEqual(self.a.colleagues.all(), [self.c, self.d])
self.assertSequenceEqual(self.a.colleagues.order_by("name"), [self.c, self.d])
self.assertSequenceEqual(self.b.colleagues.all(), [])

def test_recursive_m2m_clear(self):
Expand Down
2 changes: 1 addition & 1 deletion tests/m2m_through/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ def test_set_on_symmetrical_m2m_with_intermediate_model(self):
[anne, kate],
through_defaults={"date_friended": date_friended_set},
)
self.assertSequenceEqual(tony.sym_friends.all(), [anne, kate])
self.assertSequenceEqual(tony.sym_friends.order_by("name"), [anne, kate])
self.assertSequenceEqual(anne.sym_friends.all(), [tony])
self.assertSequenceEqual(kate.sym_friends.all(), [tony])
self.assertEqual(
Expand Down
2 changes: 1 addition & 1 deletion tests/many_to_one/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,7 @@ def test_create_after_prefetch(self):
city = City.objects.prefetch_related("districts").get(id=c.id)
self.assertSequenceEqual(city.districts.all(), [d1])
d2 = city.districts.create(name="Goa")
self.assertSequenceEqual(city.districts.all(), [d1, d2])
self.assertCountEqual(city.districts.all(), [d1, d2])

def test_clear_after_prefetch(self):
c = City.objects.create(name="Musical City")
Expand Down
2 changes: 1 addition & 1 deletion tests/migrations/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -1601,7 +1601,7 @@ def test_prune_respect_app_label(self):
for migration in recorder.applied_migrations()
if migration[0] in ["migrations", "migrations2"]
]
self.assertEqual(
self.assertCountEqual(
applied_migrations,
[
("migrations", "0001_squashed_0002"),
Expand Down
9 changes: 4 additions & 5 deletions tests/model_fields/test_jsonfield.py
Original file line number Diff line number Diff line change
Expand Up @@ -1374,15 +1374,15 @@ def test_filter(self):
def test_filter_in(self):
obj = NullableJSONModel.objects.create(value=JSONNull())
obj2 = NullableJSONModel.objects.create(value=[1])
self.assertSequenceEqual(
self.assertCountEqual(
NullableJSONModel.objects.filter(value__in=[JSONNull(), [1], "foo"]),
[obj, obj2],
)

def test_key_in(self):
obj1 = NullableJSONModel.objects.create(value={"key": None})
obj2 = NullableJSONModel.objects.create(value={"key": [1]})
self.assertSequenceEqual(
self.assertCountEqual(
NullableJSONModel.objects.filter(value__key__in=[JSONNull(), [1], 0]),
[obj1, obj2],
)
Expand All @@ -1393,9 +1393,8 @@ def test_bulk_update(self):
obj1.value = JSONNull()
obj2.value = JSONNull()
NullableJSONModel.objects.bulk_update([obj1, obj2], fields=["value"])
self.assertSequenceEqual(
NullableJSONModel.objects.filter(value=JSONNull()),
[obj1, obj2],
self.assertCountEqual(
NullableJSONModel.objects.filter(value=JSONNull()), [obj1, obj2]
)

def test_case_expression_with_jsonnull_then(self):
Expand Down
6 changes: 6 additions & 0 deletions tests/model_forms/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,9 @@ class FlexibleDatePost(models.Model):
class Color(models.Model):
name = models.CharField(max_length=50)

class Meta:
ordering = ("name",)

def __iter__(self):
yield from range(5)

Expand All @@ -388,6 +391,9 @@ class ColorfulItem(models.Model):
name = models.CharField(max_length=50)
colors = models.ManyToManyField(Color)

class Meta:
ordering = ("pk",)


class CustomErrorMessage(models.Model):
name1 = models.CharField(
Expand Down
3 changes: 3 additions & 0 deletions tests/model_formsets/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ class Owner(models.Model):
name = models.CharField(max_length=100)
place = models.ForeignKey(Place, models.CASCADE)

class Meta:
ordering = ["auto_id"]

def __str__(self):
return "%s at %s" % (self.name, self.place)

Expand Down
4 changes: 2 additions & 2 deletions tests/multiple_database/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -931,8 +931,8 @@ def test_o2o_cross_database_protection(self):
list(User.objects.using("default").values_list("username", flat=True)),
["alice"],
)
self.assertEqual(
list(User.objects.using("other").values_list("username", flat=True)),
self.assertCountEqual(
User.objects.using("other").values_list("username", flat=True),
["bob", "charlie"],
)
self.assertEqual(
Expand Down
Loading
Loading