Django赋予烫发后保存信号

时间:2013-08-12 02:58:56

标签: python django python-2.7 django-signals

我有一个名为archive的django模型,它通过外键绑定到group(django auth)。要让用户编辑此存档中的内容,他们必须具有通过django-guardian执行此操作的权限。我可以将存档链接到一个组,如下面的代码所示,但是,我需要能够为每个组设置每个对象(存档) - 权限。我正在尝试使用post_savepost_delete信号执行此操作(以正确防止孤立权限)。

换句话说,这是我想要完成的步骤。访问管理员页面。创建/编辑Archive的实例。在该页面上指定哪个用户组将与该特定关联Archive.保存该实例后,Django应自动使用该存档实例的“读取”权限对指定组进行身份验证。

我将Archive_post_save_handler存储在哪个文件中? models.py中?就目前而言,我无法分配组权限,因为我认为我无法通过我的函数传递对象。我怎么能做到这一点?作为一个额外的问题,如果我通过shell编辑模型,这个钩子也适用吗?

models.py

from django.db import models
from django.contrib.auth.models import Group
from django.db.models.signals import *
from django.dispatch import receiver

class Archive(models.Model):
    name = models.CharField(max_length = 30)
    nickname = models.CharField(max_length = 30, blank=True)
    Group = models.ForeignKey(Group, blank=True, null=True, help_text='A group of users that are allowed access to the archive. This should typically be called the same thing as the archive name.')

    class Meta:
        permissions = (
            ('read', 'Read Archive'),
        )

    def __unicode__(self):
        return self.name

@receiver(post_save, sender=Archive)
def Archive_post_save_handler(sender, instance, **kwarks):
    group = Group.objects.get(name=instance.Group)
    assign_perm('read', group, instance) #what I primarily want to accomplish in this question is on this line

1 个答案:

答案 0 :(得分:2)

我认为您在此处粘贴的代码会导致递归调用Archive_post_save_handler,因为最后一行代码也会触发另一个post_save信号。您应该从kwargs获取created参数,以测试该实例是否是第一次创建。