我试图用自己的用户模型使用监护人。是的,我知道,没有保证监护人会与另一个用户模型一起工作:-)。但我会感谢任何帮助,试图理解这一点,看看我是否能够实现这一目标。
我的用户模型定义为:
class Member(AbstractBaseUser, PermissionsMixin):
...
调用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".
“mem”成员(即用户)的id为67,所以这是正确的。 member_member似乎是正确的。
回溯的顶部是:
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__
....
当我mem = Member.objects.get(pk=2)
然后assign_perm('tab.view_tab', mem, ttt)
时,它工作正常,没有错误。当我执行mem = Member.objects.get(pk=3)
然后assign_perm('tab.view_tab', mem, ttt)
时,它会失败,如上所述。所以我似乎有一些希望。
我假设有些人让django-guardian与其他用户模型一起工作,所以我想看看我能改变什么才能使其工作。但是,诚然,我被困住了。 谢谢!