Merge PR #259 logic in a Django compatible way

fix_request_path_info
Diederik van der Boor 2019-07-12 11:59:13 +02:00
parent 17e41c4f7f
commit c160556639
No known key found for this signature in database
GPG Key ID: 4FA014E0305E73C1
1 changed files with 11 additions and 4 deletions

View File

@ -215,19 +215,26 @@ def _get_all_sub_models(base_model):
def _create_base_path(baseclass, myclass): def _create_base_path(baseclass, myclass):
# create new field path for expressions, e.g. for baseclass=ModelA, myclass=ModelC # create new field path for expressions, e.g. for baseclass=ModelA, myclass=ModelC
# 'modelb__modelc" is returned # 'modelb__modelc" is returned
bases = myclass.__bases__ for b in myclass.__bases__:
for b in bases:
if b == baseclass: if b == baseclass:
return _get_query_related_name(myclass) return _get_query_related_name(myclass)
path = _create_base_path(baseclass, b) path = _create_base_path(baseclass, b)
if path: if path:
if b._meta.abstract or b._meta.proxy: if b._meta.abstract or b._meta.proxy:
return myclass.__name__.lower() return _get_query_related_name(myclass)
return path + '__' + _get_query_related_name(myclass) else:
return path + '__' + _get_query_related_name(myclass)
return '' return ''
def _get_query_related_name(myclass): def _get_query_related_name(myclass):
for f in myclass._meta.local_fields:
if isinstance(f, models.OneToOneField) and f.remote_field.parent_link:
return f.related_query_name()
# Fallback to undetected name,
# this happens on proxy models (e.g. SubclassSelectorProxyModel)
return myclass.__name__.lower() return myclass.__name__.lower()