【发布时间】:2014-05-21 00:03:46
【问题描述】:
我有一个包含特定权限的 Django 模型。我希望能够为assigned_to field 中的那些用户分配权限。我正在使用django-guardian 来管理权限。
from django.db import models
from django.contrib.auth.models import User
from guardian.shortcuts import assign_perm
class Project(models.Model):
...
assigned_to = models.ManyToManyField(
User, default=None, blank=True, null=True
)
created_by = models.ForeignKey(
User,
related_name="%(app_label)s_%(class)s_related"
)
permissions = (
('view_project', 'View project'),
)
我尝试实现自定义保存方法。如果我在保存之前尝试这样做:
def save(self, *args, **kwargs):
for user in self.assigned_to:
assign_perm('view_project', user, self)
super(Project, self).save(*args, **kwargs)
我收到一个错误:
ObjectNotPersisted: Object <project_name> needs to be persisted first
如果我在保存后这样做(无论如何我猜这是错误的):
def save(self, *args, **kwargs):
super(Project, self).save(*args, **kwargs)
for user in self.assigned_to:
assign_perm('view_project', user, self)
我收到了Type Error 'ManyRelatedManager' object is not iterable。
我应该为此使用post-save 信号吗?对于我认为常见的模式,最好的方法是什么?
【问题讨论】: