Fixed applabel__ModelName___field looksups

Closes: #286
(cherry picked from commit 8f0932b71e)
fix_request_path_info
Diederik van der Boor 2017-11-20 15:18:43 +01:00
parent ca1a982c34
commit 9f92b0614d
2 changed files with 15 additions and 1 deletions

View File

@ -7,6 +7,8 @@ from __future__ import absolute_import
import copy
import django
from functools import reduce
from django.apps import apps
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db.models.fields.related import ForeignObjectRel, RelatedField
@ -148,7 +150,7 @@ def translate_polymorphic_field_path(queryset_model, field_path):
if '__' in classname:
# the user has app label prepended to class name via __ => use Django's get_model function
appname, sep, classname = classname.partition('__')
model = models.get_model(appname, classname)
model = apps.get_model(appname, classname)
assert model, 'PolymorphicModel: model %s (in app %s) not found!' % (model.__name__, appname)
if not issubclass(model, queryset_model):
e = 'PolymorphicModel: queryset filter error: "' + model.__name__ + '" is not derived from "' + queryset_model.__name__ + '"'

View File

@ -427,6 +427,18 @@ class PolymorphicTests(TestCase):
self.assertEqual(repr(objects[0]), '<Model2B: id 2, field1 (CharField), field2 (CharField)>')
self.assertEqual(repr(objects[1]), '<Model2C: id 3, field1 (CharField), field2 (CharField), field3 (CharField)>')
def test_polymorphic_applabel___filter(self):
self.create_model2abcd()
self.assertEqual(Model2B._meta.app_label, 'polymorphic')
objects = Model2A.objects.filter(Q(polymorphic__Model2B___field2='B2') | Q(polymorphic__Model2C___field3='C3'))
self.assertQuerysetEqual(
objects,
[Model2B, Model2C],
transform=lambda o: o.__class__,
ordered=False,
)
def test_query_filter_exclude_is_immutable(self):
# given
q_to_reuse = Q(Model2B___field2='something')