-
-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes for generic foreign key raw id widget #69
base: master
Are you sure you want to change the base?
Fixes for generic foreign key raw id widget #69
Conversation
…bject has no attribute 'rel'`
…latedObjectLookupPopup which results in a 404
Codecov Report
@@ Coverage Diff @@
## master #69 +/- ##
==========================================
+ Coverage 39% 43.64% +4.64%
==========================================
Files 7 7
Lines 423 433 +10
Branches 78 79 +1
==========================================
+ Hits 165 189 +24
+ Misses 250 233 -17
- Partials 8 11 +3
Continue to review full report at Codecov.
|
@@ -149,16 +149,21 @@ class PermissionAdmin(admin.ModelAdmin): | |||
|
|||
def formfield_for_dbfield(self, db_field, **kwargs): | |||
# For generic foreign keys marked as generic_fields we use a special widget |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added this as running tox
locally would fail for py37-dj22
and report the following:
======================================================================
ERROR: test_raw_id_GenericForeignKey (authority.tests.PermissionAdminForDBFieldTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/bia/django-authority/example/../authority/tests.py", line 490, in test_raw_id_GenericForeignKey
raw_id_fields=['object_id'])
File "/Users/bia/django-authority/example/../authority/tests.py", line 479, in assertFormfield
ff = ma.formfield_for_dbfield(model._meta.get_field(fieldname), request=None)
File "/Users/bia/django-authority/example/../authority/admin.py", line 154, in formfield_for_dbfield
for f in self.model._meta.virtual_fields
AttributeError: 'Options' object has no attribute 'virtual_fields'
Seems that virtual_fields
were deprecated in Django 1.10 and that 2.2 only has private_fields
https://docs.djangoproject.com/en/2.2/_modules/django/db/models/options/
I am porting a Django app to Django 1.11 and found some issues in the latest version of
django-authority
while doing so.The class
GenericForeignKeyRawIdWidget
hasForeignKeyRawIdWidget
as a base class but its__init__
method callsforms.TextInput.__init__
(I am guessing that this is why its class name starts with the word "Generic"). The following PR is my attempt to address errors when attempting to view an individual permission from the permissions list view.The first commit on this branch addresses an issue that occurs when
render
is called on this widget. Duringrender
a call is made toforms.TextInput.render
which then callsself.get_context
. Unfortunately this goes toForeignKeyRawIdWidget.get_context
which then blows up as it the instance of the class is missing members that would have been added byForeignKeyRawIdWidget.__init__
. In order to avoid this I have added aget_context
which simply delegates toforms.TextInput.get_context
(resolves up; but it is calling into something that has been initialised).The second commit addresses an issue that occurs when clicking the anchor of class
related-lookup
from the rendered widget. In the app that I am porting from Django 1.6.11, using django-authority 0.10 to Django 1.11 using the latest version of django-authority there are differences in the form of the URL where the widget is rendered. With the old version of Django and Django-Authority the path of the URL is like thisadmin/authority/permission/21852/
where as with Django 1.11 and latest Django-Authority I am seeingadmin/authority/permission/21852/change/
. Thus havingrelated_url
hard coded to"../../../"
is not going to work for both paths. What I have done is past therequest
object into the widget so that it can work out how many../
it should use to get back to the root of the "related" path.If you think this PR is off course or wrong could you please let me know :) thank you.