Fixes for generic foreign key raw id widget#69
Open
mikebq wants to merge 4 commits into
Open
Conversation
…bject has no attribute 'rel'`
…latedObjectLookupPopup which results in a 404
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #69 +/- ##
==========================================
+ Coverage 39.00% 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 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
mikebq
commented
Feb 28, 2020
| @@ -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 | |||
Contributor
Author
There was a problem hiding this comment.
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/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I am porting a Django app to Django 1.11 and found some issues in the latest version of
django-authoritywhile doing so.The class
GenericForeignKeyRawIdWidgethasForeignKeyRawIdWidgetas 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
renderis called on this widget. Duringrendera call is made toforms.TextInput.renderwhich then callsself.get_context. Unfortunately this goes toForeignKeyRawIdWidget.get_contextwhich 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_contextwhich 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-lookupfrom 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_urlhard coded to"../../../"is not going to work for both paths. What I have done is past therequestobject 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.