【问题标题】:Django: User can only edit or delete objects tied to their accountDjango:用户只能编辑或删除与其帐户绑定的对象
【发布时间】:2014-06-26 12:50:42
【问题描述】:

有一个与此类似的问题,但它需要使用 sweetpie - 我正在寻找一种方法来做到这一点而无需任何额外的附加组件。

我正在尝试创建一个系统,其中用户只能编辑与其帐户绑定的对象。

models.py:

class Item(models.Model):
    ...
    author = models.ForeignKey(User)
    ...

我想要一个只有在作者字段中指定的用户才能编辑或删除对象的系统。这似乎(对我来说)使用默认管理系统是不可能的。我可以通过编写自己的管理页面来实现它,该页面检查用户是否有权删除特定对象,但如果有其他方法会更好。

【问题讨论】:

    标签: python django web-applications


    【解决方案1】:

    您需要为您的模型创建一个 ModelAdmin 实例并覆盖适当的方法:

    class MyModelAdmin(admin.ModelAdmin):    
        def has_add_permission(request):
            # Should return True if adding an object is permitted, False otherwise.
    
        def has_change_permission(request, obj=None)
            # Should return True if editing obj is permitted, False otherwise.
            # If obj is None, should return True or False to indicate whether editing of objects of this type is permitted in general 
    
        def has_delete_permission(request, obj=None)
            # Should return True if deleting obj is permitted, False otherwise.
            # If obj is None, should return True or False to indicate whether deleting objects of this type is permitted in general
    

    【讨论】:

    • 非常感谢!这解决了我的问题。不知道为什么我找不到这个。
    • 这适用于 has_change_permission,但不适用于 has_delete_permission。它将一个对象传递给 obj 用于 has_change,但不用于 has_delete。是否有一个原因?否则无法判断哪个对象正在尝试删除以及是否允许删除。
    • 你看评论了吗?如果它是机器人传递一个对象,它不会尝试删除任何东西,它会尝试解决“通常是否允许删除这种类型的对象”
    • 是的,我做到了。似乎这是一个已知的错误:code.djangoproject.com/ticket/11383。当您尝试删除多个对象时,它不会传递单个对象。当您从编辑页面中删除单个对象时,它只会传递一个对象。
    • 作为一种解决方法,您可以通过将actions = None 添加到您的ModelAdmin 类来禁用多选操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多