mirror of
https://github.com/django/django.git
synced 2025-03-06 07:22:32 +00:00
[5.2.x] Fixed #36197 -- Fixed improper many-to-many count() and exists() for non-pk to_field.
Regression in 66e47ac69a7e71cf32eee312d05668d8f1ba24bb. Thanks mfontana-elem for the report and Sarah for the tests. Backport of c3a23aa02faa1cf1d32e43d66858e793cd9ecac4 from main.
This commit is contained in:
parent
b0d497ada0
commit
6b8a6e1251
@ -1219,7 +1219,7 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
|
||||
return None
|
||||
hints = {"instance": self.instance}
|
||||
manager = self.through._base_manager.db_manager(db, hints=hints)
|
||||
filters = {self.source_field_name: self.instance.pk}
|
||||
filters = {self.source_field_name: self.related_val[0]}
|
||||
# Nullable target rows must be excluded as well as they would have
|
||||
# been filtered out from an INNER JOIN.
|
||||
if self.target_field.null:
|
||||
|
@ -16,3 +16,8 @@ Bugfixes
|
||||
* Fixed a bug in Django 5.1 where ``FileSystemStorage``, with
|
||||
``allow_overwrite`` set to ``True``, did not truncate the overwritten file
|
||||
content (:ticket:`36191`).
|
||||
|
||||
* Fixed a regression in Django 5.1 where the ``count`` and ``exists`` methods
|
||||
of ``ManyToManyField`` related managers would always return ``0`` and
|
||||
``False`` when the intermediary model back references used ``to_field``
|
||||
(:ticket:`36197`).
|
||||
|
@ -533,3 +533,11 @@ class M2mThroughToFieldsTests(TestCase):
|
||||
[choice[0] for choice in field.get_choices(include_blank=False)],
|
||||
["pea", "potato", "tomato"],
|
||||
)
|
||||
|
||||
def test_count(self):
|
||||
self.assertEqual(self.curry.ingredients.count(), 3)
|
||||
self.assertEqual(self.tomato.recipes.count(), 1)
|
||||
|
||||
def test_exists(self):
|
||||
self.assertTrue(self.curry.ingredients.exists())
|
||||
self.assertTrue(self.tomato.recipes.exists())
|
||||
|
Loading…
x
Reference in New Issue
Block a user