[Django] #25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'

45 views
Skip to first unread message

Django

unread,
Oct 28, 2015, 4:38:59 AM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------
Reporter: johnraz | Owner: nobody
Type: Bug | Status: new
Component: contrib.admin | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------
I have the following setup (simplified for the sake of clarity)

{{{
# models.py
class ModelA(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
uuid = models.UUIDField(default=uuid.uuid4, unique=True,
db_index=True)

class ModelB(models.Model):
model_a_fk = models.ForeignKey('ModelA', to_field='uuid')
model_c_fk = models.ForeignKey('ModelC')

class ModelC(models.Model):
... # nothing fancy
}}}


{{{
#admin.py
class ModelAAdmin(admin.ModelAdmin):
.... #nothing fancy

class InlineModelB(admin.TabularInline):
model=ModelB
raw_id_fields=('model_a_fk', 'model_c_fk')

class ModelBAdmin(admin.ModelAdmin):
raw_id_fields=('model_a_fk', 'model_c_fk')

class ModelCAdmin(admin.ModelAdmin):
inlines=(InlineModelB,)
}}}

Now, when going to the `ModelCAdmin` view, triggering the search pop-up
for `ModelB.model_a_fk` field, I will get the following traceback:


{{{
File "/usr/local/lib/python2.7/dist-
packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/contrib/admin/options.py", line 616, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/contrib/admin/sites.py", line 233, in inner
return view(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/utils/decorators.py", line 34, in _wrapper
return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/utils/decorators.py", line 30, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python2.7/dist-
packages/django/contrib/admin/options.py", line 1548, in changelist_view
self.list_max_show_all, self.list_editable, self)
File "/usr/local/lib/python2.7/dist-
packages/django/contrib/admin/views/main.py", line 67, in __init__
if to_field and not model_admin.to_field_allowed(request, to_field):
File "/usr/local/lib/python2.7/dist-
packages/django/contrib/admin/options.py", line 489, in to_field_allowed
related_object.field.rel.get_related_field() == field):
AttributeError: 'GenericRel' object has no attribute 'get_related_field'
}}}

Triggering the search pop-up for `ModelB.model_c_fk` works just fine.

It looks like https://code.djangoproject.com/ticket/23616 but in a
different place.

--
Ticket URL: <https://code.djangoproject.com/ticket/25622>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Oct 28, 2015, 10:43:02 AM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: assigned
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Changes (by charettes):

* status: new => assigned
* needs_better_patch: => 0
* owner: nobody => charettes
* needs_tests: => 0
* needs_docs: => 0


--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:1>

Django

unread,
Oct 28, 2015, 11:37:19 AM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution: worksforme
Keywords: | Triage Stage: Unreviewed

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Changes (by charettes):

* status: assigned => closed
* resolution: => worksforme


Comment:

Hi johnraz,

This looks like a legitimate traceback but I cannot reproduce with your
provided setup against `1.8.x` and `master`.

Can you confirm [https://github.com/charettes/django-
ticketing/tree/master/ticket_25622 I didn't miss something]?

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:2>

Django

unread,
Oct 28, 2015, 11:38:41 AM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution: worksforme
Keywords: | Triage Stage: Unreviewed

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------

Comment (by charettes):

Do you have a `django.contrib.contenttypes.fields.GenericRelation` defined
somewhere?

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:3>

Django

unread,
Oct 28, 2015, 1:54:36 PM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution: worksforme
Keywords: | Triage Stage: Unreviewed

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------

Comment (by johnraz):

Yes you are absolutely right.
I do have a `GenericRelation` setup like this (in addition to the previous
example):

{{{
# models.py

class AbstractModelX(models.Model):
model_a_gen_rel = GenericRelation(SortedDocument)
class Meta:
abstract=True

class ModelD(AbstractModelX):
pass

class ModelE(AbstractModelX):
pass
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:4>

Django

unread,
Oct 28, 2015, 2:00:29 PM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+--------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: new
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Changes (by charettes):

* status: closed => new
* resolution: worksforme =>


Comment:

Will look into this soon.

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:5>

Django

unread,
Oct 28, 2015, 3:17:35 PM10/28/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes

Type: Bug | Status: new
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------+-------------------------------------
Changes (by charettes):

* has_patch: 0 => 1
* stage: Unreviewed => Accepted


Comment:

Managed to reproduced with simplified models, thanks. Here's a
[https://github.com/django/django/pull/5496 PR] you can test.

I guess we should backport this since it's a bug in a new feature.

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:6>

Django

unread,
Oct 29, 2015, 7:25:57 AM10/29/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes

Type: Bug | Status: new
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin

Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timgraham):

* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:7>

Django

unread,
Oct 29, 2015, 7:44:39 AM10/29/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: new
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by johnraz):

Splendid !
It works for me.

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:8>

Django

unread,
Oct 29, 2015, 1:14:54 PM10/29/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Simon Charette <charette.s@…>):

* status: new => closed
* resolution: => fixed


Comment:

In [changeset:"9dcfecb7c6c8285630ad271888a9ec4ba9140e3a" 9dcfecb]:
{{{
#!CommitTicketReference repository=""
revision="9dcfecb7c6c8285630ad271888a9ec4ba9140e3a"
Fixed #25622 -- Accounted for generic relations in the admin to field
validation

Thanks to Jonathan Liuti for the report and Tim Graham for the review.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:9>

Django

unread,
Oct 29, 2015, 1:15:50 PM10/29/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8

Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Simon Charette <charette.s@…>):

In [changeset:"6eaf43a24471f98939da18d031b4f0b4e49640c6" 6eaf43a2]:
{{{
#!CommitTicketReference repository=""
revision="6eaf43a24471f98939da18d031b4f0b4e49640c6"
[1.9.x] Fixed #25622 -- Accounted for generic relations in the admin to
field validation

Thanks to Jonathan Liuti for the report and Tim Graham for the review.

Backport of 9dcfecb7c6c8285630ad271888a9ec4ba9140e3a from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:10>

Django

unread,
Oct 29, 2015, 1:21:14 PM10/29/15
to django-...@googlegroups.com
#25622: InlineAdmin raises 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
Reporter: johnraz | Owner: charettes
Type: Bug | Status: closed
Component: contrib.admin | Version: 1.8

Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Simon Charette <charette.s@…>):

In [changeset:"c42e4e736a587dc9858fe55fb972aefaa065867d" c42e4e7]:
{{{
#!CommitTicketReference repository=""
revision="c42e4e736a587dc9858fe55fb972aefaa065867d"


Fixed #25622 -- Accounted for generic relations in the admin to field
validation

Thanks to Jonathan Liuti for the report and Tim Graham for the review.

Conflicts:
django/contrib/admin/options.py
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/25622#comment:11>

Reply all
Reply to author
Forward
0 new messages