pythonDjango(守护者):根据我的mod中的m2mfield编辑数据

2024-09-27 23:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的有麻烦让我的管理界面工作。我有一个模型,在这个模型中有一个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) 

Tags: django模型form权限界面modelsrequestsave
1条回答
网友
1楼 · 发布于 2024-09-27 23:28:57

您需要在管理表单上定义一个save_m2m方法,并在那里执行自定义关系构建,而不是在模型的save方法中尝试这样做。这是因为模型管理员adds a ^{} method to your model form并在您的模型表单上的调用save之后调用它,将m2m关系设置为表单中的选择(在第一次保存时,其值可能为空)。在

相关问题 更多 >

    热门问题