Fix "Model" __ "_field" query support
Broken by 24e6b21204 for Django 1.9
upgrade
fix_request_path_info
parent
4e5ac03412
commit
07242d210f
|
|
@ -8,14 +8,7 @@ from django.db import models
|
|||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db.models import Q, FieldDoesNotExist
|
||||
|
||||
try:
|
||||
from django.db.models.related import RelatedObject
|
||||
except ImportError:
|
||||
# django.db.models.related.RelatedObject was replaced
|
||||
# by django.db.models.fields.related.ForeignObjectRel in
|
||||
# Django 1.8
|
||||
from django.db.models.fields.related import ForeignObjectRel
|
||||
RelatedObject = ForeignObjectRel
|
||||
from django.db.models.fields.related import RelatedField # Django 1.8
|
||||
|
||||
from functools import reduce
|
||||
|
||||
|
|
@ -163,7 +156,7 @@ def translate_polymorphic_field_path(queryset_model, field_path):
|
|||
try:
|
||||
# rel = (field_object, model, direct, m2m)
|
||||
field = queryset_model._meta.get_field(classname)
|
||||
if isinstance(field, RelatedObject):
|
||||
if isinstance(field, RelatedField):
|
||||
# Can also test whether the field exists in the related object to avoid ambiguity between
|
||||
# class names and field names, but that never happens when your class names are in CamelCase.
|
||||
return field_path # No exception raised, field does exist.
|
||||
|
|
|
|||
|
|
@ -153,6 +153,15 @@ class One2OneRelatingModelDerived(One2OneRelatingModel):
|
|||
field2 = models.CharField(max_length=10)
|
||||
|
||||
|
||||
class ModelUnderRelParent(PolymorphicModel):
|
||||
field1 = models.CharField(max_length=10)
|
||||
_private = models.CharField(max_length=10)
|
||||
|
||||
|
||||
class ModelUnderRelChild(PolymorphicModel):
|
||||
parent = models.ForeignKey(ModelUnderRelParent)
|
||||
|
||||
|
||||
class MyManagerQuerySet(PolymorphicQuerySet):
|
||||
|
||||
def my_queryset_foo(self):
|
||||
|
|
@ -720,6 +729,14 @@ 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___filter_field(self):
|
||||
p = ModelUnderRelParent.objects.create(_private=True, field1='AA')
|
||||
ModelUnderRelChild.objects.create(parent=p)
|
||||
|
||||
# The "___" filter should also parse to "parent" -> "_private" as fallback.
|
||||
objects = ModelUnderRelChild.objects.filter(parent___private=True)
|
||||
self.assertEqual(len(objects), 1)
|
||||
|
||||
def test_delete(self):
|
||||
self.create_model2abcd()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue