我真的很难让我的管理界面正常工作。我有一个模型,并且在该模型中有一个要分组的 m2m 字段:
from django.contrib.auth.models import Group
class Lecture(models.Model):
....
allowed_groups = models.ManyToManyField(Group)
....
现在,当模型被保存时,我想给这些组特殊的查看权限,这样只有这些组的成员才能看到该模型的对象。我使用django-guardian来获取每个对象的权限。所以在我的模型的保存方法中,我做了这样的事情:
def save(self, *args, **kwargs):
allGroups = Group.objects.all()
super(Lecture, self).save(*args, **kwargs)
groups = self.allowed_groups.all()
viewright = 'view_lecture'
for ag in allGroups:
if ag in groups:
assign_perm(viewright, ag, self) #assign_perm comes from guardian
else:
remove_perm(viewright, ag, self) #remove_perm comes from guardian
我也尝试使用 post_save 信号,但问题是,我总是在我的管理界面中按下保存按钮两次以进行任何更改(组总是以正确的方式添加,但权限只添加在第二次通过管理界面中的保存按钮保存模型)那么这里发生了什么?有人可以帮忙吗?
- - 编辑 - -
我的解决方案:我将权限分配代码移到了我的 ModelAdmin 类中,如下所示:
管理员.py
class LectureAdmin(admin.ModelAdmin):
def save_model(self, request, lecture, form, change):
if not lecture.id:
lecture.owner = request.user
super(LectureAdmin, self).save_model(request, lecture, form, change)
allGroups = Group.objects.all()
groups = form.cleaned_data['allowed_groups']
viewright = 'cms.view_lecture'
for ag in allGroups:
if ag in groups:
assign_perm(viewright, ag, lecture)
else:
remove_perm(viewright, ag, lecture)