【问题标题】:How to add django-guardian permisions after object was created in CreateView in django?在 django 的 CreateView 中创建对象后如何添加 django-guardian 权限?
【发布时间】:2014-05-20 13:32:26
【问题描述】:

我得到了使用基本 ModelForm 的简单 CreateView,我想在创建此特定对象后为当前用户添加 can_view 权限。据我了解,必须在保存对象后完成。我应该为此使用post_save 信号吗?请记住,我不想在修改现有对象时触发它。

【问题讨论】:

    标签: django django-models permissions django-class-based-views django-guardian


    【解决方案1】:

    这可以在模型保存方法中完成

    class MyModel(models.Model):
        def save(self):
            if 'pk' not in self:
                #add you permission code here
            super(MyModel, self).save()
    

    它的作用是检查你的对象是否有主键。如果不是,那么这是一个新对象,应该创建权限。如果一个主键,那么这个对象正在被编辑,不应添加任何权限。

    【讨论】:

    • 我为此而奋斗,但在模型中我没有访问 request.user 的权限。所以我需要考虑一些工作来让用户创建对象
    • 试过了,我得到了argument of type 'ModelName' is not iterableif 'pk' not in self: 上线
    • 我不知道为什么,但if 'pk' not in self.__dict__ 有效。但正如我之前写的ObjectNotPersisted: Object firn lastn needs to be persisted first
    • @Lord_JABA,检查是否有可以通过三种方式完成。最好的情况是 if hasattr(self, "pk")。如果属性存在,将返回 true。但是它不会告诉您此属性的值是否为 None (即,如果 pk 为 None,将返回 true。第二个是 if self.pk: 如果 pk 有值,则将评估为 true,但如果 pk 这将引发错误不存在即 pk 尚未创建。在 self.__dict__ 中调用 pk 与选项 1 基本相同。
    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2014-06-21
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多