django admin,删除之前如何检查模型实例属于所有者?

时间:2018-02-09 07:39:52

标签: django django-admin

我尝试覆盖def has_delete_permission(self,request,obj = None):,但是在删除Django Admin中的记录时没有传递obj。

任何帮助将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:1)

<强>模型

from django.contrib.auth.models import User

class Item(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    info = models.TextField()

查看

obj = Item.objects.get(id=1)
if obj.owner == request.user:
    obj.delete()

为了在Django Admin中执行此操作,您需要覆盖delete_model文件中的admin.py方法。对以上模型使用以下代码,以确保用户只删除自己的内容,而不删除其他人的内容。

<强> admin.py

class ItemAdmin(admin.ModelAdmin):
    def delete_model(self, request, obj):
        if obj.owner == request.user:
            obj.delete()
        return

admin.site.register(Item, ItemAdmin)

现在尝试从管理页面在模型中创建两个对象,并使用两个单独的用户作为所有者。您只能删除自己的内容,而不能删除其他内容。我查了一下代码。这对我有用。