You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We're making our querysets restrict results to just the objects that user has permissions for. We changed the default manager the model uses like these docs suggest. The issue is though, there is no user at startup time when django-filter ends up having its filter_for_field method called.
I've tried to use:
def filter_queryset(self, queryset):
breakpoint() # or `raise Exception('I failed')` here instead
return self.super().filter_queryset(queryset)
So basically for fields that refer to MyModel:
class MyModel():
<fields>
objects = UserAwareManager()
another_name_for_objects = model.Manager() # <-- This is the default manager
What I need is for django-filter to use MyModel.another_name_for_objects instead of MyModel.objects. Here's the traceback I get:
Traceback (most recent call last):
File "/usr/local/lib/pulp/bin/pulpcore-manager", line 33, in <module>
sys.exit(load_entry_point('pulpcore', 'console_scripts', 'pulpcore-manager')())
File "/home/vagrant/devel/pulpcore/pulpcore/app/manage.py", line 11, in manage
execute_from_command_line(sys.argv)
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
django.setup()
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/django/apps/registry.py", line 122, in populate
app_config.ready()
File "/home/vagrant/devel/pulpcore/pulpcore/app/apps.py", line 191, in ready
super().ready()
File "/home/vagrant/devel/pulpcore/pulpcore/app/apps.py", line 96, in ready
self.import_viewsets()
File "/home/vagrant/devel/pulpcore/pulpcore/app/apps.py", line 129, in import_viewsets
from pulpcore.app.viewsets import NamedModelViewSet
File "/home/vagrant/devel/pulpcore/pulpcore/app/viewsets/__init__.py", line 65, in <module>
from .task import TaskViewSet, TaskGroupViewSet, WorkerViewSet # noqa
File "/home/vagrant/devel/pulpcore/pulpcore/app/viewsets/task.py", line 30, in <module>
class TaskFilter(BaseFilterSet):
File "/home/vagrant/devel/django-filter/django_filters/filterset.py", line 71, in __new__
new_class.base_filters = new_class.get_filters()
File "/home/vagrant/devel/django-filter/django_filters/filterset.py", line 351, in get_filters
filters[filter_name] = cls.filter_for_field(field, field_name, lookup_expr)
File "/home/vagrant/devel/pulpcore/pulpcore/app/viewsets/base.py", line 546, in filter_for_field
f = super().filter_for_field(field, name, lookup_expr)
File "/home/vagrant/devel/django-filter/django_filters/filterset.py", line 372, in filter_for_field
field, lookup_type = resolve_field(field, lookup_expr)
File "/home/vagrant/devel/django-filter/django_filters/utils.py", line 196, in resolve_field
query = model_field.model._default_manager.all().query
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/django/db/models/manager.py", line 156, in all
return self.get_queryset()
File "/home/vagrant/devel/pulpcore/pulpcore/app/models/task.py", line 155, in get_queryset
return get_objects_for_user(current_user, "core.view_task", klass=qs)
File "/usr/local/lib/pulp/lib64/python3.9/site-packages/guardian/shortcuts.py", line 542, in get_objects_for_user
if with_superuser and user.is_superuser:
AttributeError: 'NoneType' object has no attribute 'is_superuser'
Any ideas on what I should do here? Thanks in advance!
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
We're making our querysets restrict results to just the objects that user has permissions for. We changed the default manager the model uses like these docs suggest. The issue is though, there is no user at startup time when django-filter ends up having its
filter_for_field
method called.I've tried to use:
So basically for fields that refer to
MyModel
:What I need is for django-filter to use
MyModel.another_name_for_objects
instead ofMyModel.objects
. Here's the traceback I get:Any ideas on what I should do here? Thanks in advance!
Beta Was this translation helpful? Give feedback.
All reactions