django - Assiging permissions with guardian's shortcut assign_perm results in 'NoneType' object has no attribute 'objects' -
i have 2 applications in django project, let's assume it's appa , appb. applications installed external packages via pip install. both of them have additional permissions in models:
appa has got:
class meta: permissions = ( ('clone_poll', 'can clone poll'), ('close_poll', 'can close poll'), ('viewresults_poll', 'can view poll results'), ) appb has got:
class meta: permissions = ( ('viewresults_meeting', 'can view meeting results'), ) i installed both applications in project , tried create instances of models have. works fine(object created , saved db) until permission assign step, following error occurred:
traceback (most recent call last): file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/core/handlers/base.py", line 114, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view return view_func(request, *args, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/polls/views.py", line 529, in clone_poll initial_dict=initial)(request, kwargs=kwa) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/contrib/formtools/wizard/views.py", line 236, in dispatch response = super(wizardview, self).dispatch(request, *args, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/views/generic/base.py", line 87, in dispatch return handler(request, *args, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/contrib/formtools/wizard/views.py", line 297, in post return self.render_done(form, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/contrib/formtools/wizard/views.py", line 350, in render_done done_response = self.done(final_form_list, **kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/polls/views.py", line 203, in done assign_perm('polls.change_poll', self.request.user, poll_obj) file "/home/polls/pythonpolls/lib/python2.7/site-packages/guardian/shortcuts.py", line 91, in assign_perm return model.objects.assign_perm(perm, user, obj) file "/home/polls/pythonpolls/lib/python2.7/site-packages/guardian/managers.py", line 41, in assign_perm obj_perm, created = self.get_or_create(**kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/db/models/manager.py", line 154, in get_or_create return self.get_queryset().get_or_create(**kwargs) file "/home/polls/pythonpolls/lib/python2.7/site-packages/django/db/models/query.py", line 380, in get_or_create obj.save(force_insert=true, using=self.db) file "/home/polls/pythonpolls/lib/python2.7/site-packages/guardian/models.py", line 44, in save content_type = contenttype.objects.get_for_model(self.content_object) attributeerror: 'nonetype' object has no attribute 'objects' i inspected exact place of occurring error, in django-guardian internal. seems garbage collector cleaned local context, setting imports none:
'userobjectpermissionmanager': none, '__file__': none, 'user_model_label': none, '__name__': none, 'groupobjectpermissionmanager': none, 'contenttype': none, 'settings': none, 'permission': none, 'groupobjectpermissionbase': none, 'baseobjectpermission': none, 'userobjectpermissionbase': none what more, when remove 1 of applications e.g. appa installed_apps, other works fine i.e. permissions set.
i have no idea origin of problem, if it's in apps, in guardian or in other application?
after few days of struggling problem found solution, , real origin of problem. first of i've been using django 1.6.10. in both applications have registered handlers user_logged_in signals. put proper functions , bindings(user_logged_in.connect(handler)) file called signals.py in both apps. signals.py imported in __init__.py, make signals connection work. there dependance on models.py in 1 of files, imported signals.py- done in 1 of apps. getting point, problem circular imports in 1 of app. solution found work move signals.py contents models.py, remove signals imports __init__.py.
Comments
Post a Comment