我正在尝试将监护人与我自己的用户模型一起使用。是的,我知道,不能保证监护人会与另一个用户模型一起工作:-)。但我会很感激任何帮助试图理解这一点,看看我是否能做到这一点。
我的用户模型定义为:
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 与其他用户模型一起工作,所以我想看看我可以改变什么来完成这项工作。但是,不可否认,我被困住了。谢谢!