Django:用户只能编辑或删除与其账户相关的对象

2 投票
1 回答
2454 浏览
提问于 2025-04-18 11:10

这个问题和之前的一个问题有点相似,不过那个问题需要用到tastypie。我想找一种方法,不用任何额外的插件。

我想创建一个系统,让用户只能编辑与他们账户相关的对象。

models.py:

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

我希望有一个系统,只有在作者字段中指定的用户才能编辑或删除这个对象。对我来说,似乎用默认的管理系统无法做到这一点。我可以通过自己写一个管理页面来检查用户是否有权限删除特定对象,但如果有其他方法就更好了。

1 个回答

2

你需要为你的模型创建一个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

撰写回答