我真的有讓我的管理界面工作的麻煩。我有一個模型,該模型中的M2M場到組:Python Django(監護人):根據我的模型中的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類,這樣的:
admin.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)
好的,謝謝你的快速回答,我會稍後再試! – Magda
@Magda沒問題 - 讓我知道如果這可以解決問題。 – orokusaki
嘿,感謝您的回答,它真的讓我走上了正軌,但最終我最終將模型中的save方法中的東西移動到了我的ModelAdmin中的save_model。在那裏我可以訪問form.cleaned_data。 – Magda