diff options
| author | taulant <taliraj@outlook.com> | 2021-08-30 17:44:22 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-09-03 06:48:32 +0200 |
| commit | 0e8be73812a6e62d5a6b12a585d133b56bc2bf52 (patch) | |
| tree | 37e31a58d4eca2dd7b82dd5bab998fcfc5a15e67 /django/forms | |
| parent | b8824e8d17434957650517370f739e340867c381 (diff) | |
Fixed #32975 -- Fixed admin system check for inlines with foreign keys to proxy models.
Diffstat (limited to 'django/forms')
| -rw-r--r-- | django/forms/models.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/django/forms/models.py b/django/forms/models.py index a88c384841..16681ba80b 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -1009,9 +1009,17 @@ def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False): fks_to_parent = [f for f in opts.fields if f.name == fk_name] if len(fks_to_parent) == 1: fk = fks_to_parent[0] - if not isinstance(fk, ForeignKey) or \ - (fk.remote_field.model != parent_model and - fk.remote_field.model not in parent_model._meta.get_parent_list()): + parent_list = parent_model._meta.get_parent_list() + if not isinstance(fk, ForeignKey) or ( + # ForeignKey to proxy models. + fk.remote_field.model._meta.proxy and + fk.remote_field.model._meta.proxy_for_model not in parent_list + ) or ( + # ForeignKey to concrete models. + not fk.remote_field.model._meta.proxy and + fk.remote_field.model != parent_model and + fk.remote_field.model not in parent_list + ): raise ValueError( "fk_name '%s' is not a ForeignKey to '%s'." % (fk_name, parent_model._meta.label) ) @@ -1021,11 +1029,15 @@ def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False): ) else: # Try to discover what the ForeignKey from model to parent_model is + parent_list = parent_model._meta.get_parent_list() fks_to_parent = [ f for f in opts.fields if isinstance(f, ForeignKey) and ( f.remote_field.model == parent_model or - f.remote_field.model in parent_model._meta.get_parent_list() + f.remote_field.model in parent_list or ( + f.remote_field.model._meta.proxy and + f.remote_field.model._meta.proxy_for_model in parent_list + ) ) ] if len(fks_to_parent) == 1: |
