I am attempting to use guardian with my own User model. Yes, I know, there is no guarantee guardian is going to work with another User model :-). But I would appreciate any help in attempting to understand this to see if I can get this going.
My user model is defined as:
class Member(AbstractBaseUser, PermissionsMixin):
...
I am getting an error when calling assign_perm('tab.view_tab', mem, ttt).
IntegrityError: insert or update on table "guardian_userobjectpermission" violates foreign key constraint "guardian_userobjectpermission_user_id_fkey"
DETAIL: Key (user_id)=(67) is not present in table "member_member".
the "mem" Member (ie user) has an id of 67, so that is correct. member_member appears to be correct.
The top part of the traceback is:
In [14]: assign_perm('tab.view_tab', mem, ttt)
---------------------------------------------------------------------------
IntegrityError Traceback (most recent call last)
<ipython-input-14-fbd245913aef> in <module>()
----> 1 assign_perm('tab.view_tab', mem, ttt)
<dir>/env/local/lib/python2.7/site-packages/guardian/shortcuts.pyc in assign_perm(perm, user_or_group, obj)
89 if user:
90 model = get_user_obj_perms_model(obj)
---> 91 return model.objects.assign_perm(perm, user, obj)
92 if group:
93 model = get_group_obj_perms_model(obj)
<dir>/env/local/lib/python2.7/site-packages/guardian/managers.pyc in assign_perm(self, perm, user, obj)
39 else:
40 kwargs['content_object'] = obj
---> 41 obj_perm, created = self.get_or_create(**kwargs)
42 return obj_perm
43
<dir>/env/local/lib/python2.7/site-packages/django/db/models/manager.pyc in manager_method(self, *args, **kwargs)
90 def create_method(name, method):
91 def manager_method(self, *args, **kwargs):
---> 92 return getattr(self.get_queryset(), name)(*args, **kwargs)
93 manager_method.__name__ = method.__name__
94 manager_method.__doc__ = method.__doc__
....
When I did mem = Member.objects.get(pk=2)
and then assign_perm('tab.view_tab', mem, ttt)
it worked fine with no error. When I do mem = Member.objects.get(pk=3)
and then assign_perm('tab.view_tab', mem, ttt)
it failed as above. So it seems I might have some hope.
I assume some people have got django-guardian working with other user models, so I want to see what I can change in mine to make this work. But, admittedly, I am stuck. Thanks!