我真的有麻烦让我的管理界面工作。我有一个模型,在这个模型中有一个m2m字段要分组:
from django.contrib.auth.models import Group
class Lecture(models.Model):
....
allowed_groups = models.ManyToManyField(Group)
....
现在,当模型被保存时,我想给这些组赋予特殊的查看权限,这样只有这些组的成员才能看到该模型的对象。我使用django-guardian表示每个对象的权限。所以在我的模型的save方法中,我做了如下操作:
^{pr2}$我也试过使用后保存信号,但问题是,我总是在我的管理界面按两次“保存”按钮来进行任何更改(组总是以正确的方式添加,但只有在通过管理界面中的“保存”按钮保存模型的第二次时才添加权限),所以这里发生了什么?有人能帮忙吗?在
---编辑---
我的解决方案是:我将权限分配代码移到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)
您需要在管理表单上定义一个} method to your model form 并在您的模型表单上的调用
save_m2m
方法,并在那里执行自定义关系构建,而不是在模型的save方法中尝试这样做。这是因为模型管理员adds a ^{save
之后调用它,将m2m关系设置为表单中的选择(在第一次保存时,其值可能为空)。在相关问题 更多 >
编程相关推荐