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.contrib.contenttypes.models import ContentType
|
||||||
from django.db.models import Q, FieldDoesNotExist
|
from django.db.models import Q, FieldDoesNotExist
|
||||||
|
|
||||||
try:
|
from django.db.models.fields.related import RelatedField # Django 1.8
|
||||||
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 functools import reduce
|
from functools import reduce
|
||||||
|
|
||||||
|
|
@ -163,7 +156,7 @@ def translate_polymorphic_field_path(queryset_model, field_path):
|
||||||
try:
|
try:
|
||||||
# rel = (field_object, model, direct, m2m)
|
# rel = (field_object, model, direct, m2m)
|
||||||
field = queryset_model._meta.get_field(classname)
|
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
|
# 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.
|
# 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.
|
return field_path # No exception raised, field does exist.
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,15 @@ class One2OneRelatingModelDerived(One2OneRelatingModel):
|
||||||
field2 = models.CharField(max_length=10)
|
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):
|
class MyManagerQuerySet(PolymorphicQuerySet):
|
||||||
|
|
||||||
def my_queryset_foo(self):
|
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[0]), '<Model2B: id 2, field1 (CharField), field2 (CharField)>')
|
||||||
self.assertEqual(repr(objects[1]), '<Model2C: id 3, field1 (CharField), field2 (CharField), field3 (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):
|
def test_delete(self):
|
||||||
self.create_model2abcd()
|
self.create_model2abcd()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue