2

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!

brechmos
  • 1,278
  • 1
  • 11
  • 22
  • 1. Is member registered as `AUTH_USER_MODEL`? 2. Please show member table with all its fields – zymud Mar 05 '15 at 16:21

0 Answers0