Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fixed regression introduced by 04a2a6b. #1692

Closed
wants to merge 1 commit into from

2 participants

@loic
Collaborator

#3871 made RelatedManager a callable and when DTL picks up a callable
it tries to call it. By adding a do_not_call_in_templates=True attribute
to RelatedManager we prevent this behavior.

Thanks jbg@ for the report.

Fixed #3871

@loic loic Fixed regression introduced by 04a2a6b.
it tries to call it. By adding a do_not_call_in_templates=True attribute
to RelatedManager we prevent this behavior.

Thanks jbg@ for the report.

Fixed #3871
13f1277
@timgraham
Owner

merged in d847ddf - thanks!

@timgraham timgraham closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 30, 2013
  1. @loic

    Fixed regression introduced by 04a2a6b.

    loic authored
    it tries to call it. By adding a do_not_call_in_templates=True attribute
    to RelatedManager we prevent this behavior.
    
    Thanks jbg@ for the report.
    
    Fixed #3871
This page is out of date. Refresh to see the latest.
View
1  django/contrib/contenttypes/generic.py
@@ -335,6 +335,7 @@ def __call__(self, **kwargs):
object_id_field_name = self.object_id_field_name,
prefetch_cache_name = self.prefetch_cache_name,
)
+ do_not_call_in_templates = True
def get_queryset(self):
try:
View
2  django/db/models/fields/related.py
@@ -379,6 +379,7 @@ def __call__(self, **kwargs):
manager = getattr(self.model, kwargs.pop('manager'))
manager_class = create_foreign_related_manager(manager.__class__, rel_field, rel_model)
return manager_class(self.instance)
+ do_not_call_in_templates = True
def get_queryset(self):
try:
@@ -540,6 +541,7 @@ def __call__(self, **kwargs):
through=self.through,
prefetch_cache_name=self.prefetch_cache_name,
)
+ do_not_call_in_templates = True
def get_queryset(self):
try:
View
27 tests/managers_regress/models.py
@@ -3,7 +3,9 @@
"""
from django.db import models
-from django.utils.encoding import python_2_unicode_compatible
+from django.contrib.contenttypes import generic
+from django.contrib.contenttypes.models import ContentType
+from django.utils.encoding import python_2_unicode_compatible, force_text
class OnlyFred(models.Manager):
@@ -119,3 +121,26 @@ class Child6(Child4):
# Will not inherit default manager from parent.
class Child7(Parent):
pass
+
+
+# RelatedManagers
+@python_2_unicode_compatible
+class RelatedModel(models.Model):
+ test_gfk = generic.GenericRelation('RelationModel', content_type_field='gfk_ctype', object_id_field='gfk_id')
+
+ def __str__(self):
+ return force_text(self.pk)
+
+
+@python_2_unicode_compatible
+class RelationModel(models.Model):
+ fk = models.ForeignKey(RelatedModel, related_name='test_fk')
+
+ m2m = models.ManyToManyField(RelatedModel, related_name='test_m2m')
+
+ gfk_ctype = models.ForeignKey(ContentType)
+ gfk_id = models.IntegerField()
+ gfk = generic.GenericForeignKey(ct_field='gfk_ctype', fk_field='gfk_id')
+
+ def __str__(self):
+ return force_text(self.pk)
View
21 tests/managers_regress/tests.py
@@ -4,8 +4,9 @@
from django.conf import settings
from django.db import models
from django.db.models.loading import cache
+from django.template import Context, Template
from django.test import TestCase
-from django.test.utils import override_settings
+from django.utils.encoding import force_text
from .models import (
Child1,
@@ -18,6 +19,8 @@
AbstractBase1,
AbstractBase2,
AbstractBase3,
+ RelatedModel,
+ RelationModel,
)
@@ -193,3 +196,19 @@ class Meta:
del settings.TEST_SWAPPABLE_MODEL
cache.app_models = old_app_models
cache.app_store = old_app_store
+
+ def test_regress_3871(self):
+ related = RelatedModel.objects.create()
+
+ relation = RelationModel()
+ relation.fk = related
+ relation.gfk = related
+ relation.save()
+ relation.m2m.add(related)
+
+ t = Template('{{ related.test_fk.all.0 }}{{ related.test_gfk.all.0 }}{{ related.test_m2m.all.0 }}')
+
+ self.assertEqual(
+ t.render(Context({'related': related})),
+ ''.join([force_text(relation.pk)] * 3),
+ )
Something went wrong with that request. Please try again.