Django管理员网站用户模型限制

时间:2016-02-03 20:38:34

标签: python django admin models

我是Django的新手,但由于我正在做一个相当简单的应用程序,我被朋友建议只使用管理网站,这很快,很容易,我几乎完成了我的项目,但我需要一件事我似乎找不到任何地方。

我的模型是关于添加编程问题,但是我需要有一个字段来标识哪个用户添加了它,并且只有该用户和超级用户可以删除或更改他刚刚添加的问题。

当然添加字段​​非常简单,但我如何识别谁在添加问题?以及如何只验证他和超级用户可以更改或删除所述问题?我相信这是这个项目最具挑战性的阶段,你能帮帮我吗?

提前致谢:)!

编辑:这是我最近刚才得到的答案,但我很困惑:/

EDIT2:现在看起来是这样的,但它给了我一个类型错误,并将整个管理网站带下来:

“has_change_permission()只需3个参数(2个给定)”

EDIT3:现在我已经更改了代码,但它仍然允许普通员工擦除删除条目,遗憾的是现在当我尝试修改条目的内容时,它会在编辑2中给出错误。

EDIT4:最后由于你的帮助,我可以让普通用户无法直接在数据库上删除,但是查询集的默认删除仍适用于他们,我该怎么办?

EDIT5:感谢您今天给我的所有帮助,现在它的确有效,非常棒!我留下代码,所以其他人有同样的问题可以做到这一点,我不得不进行这么长时间的研究,以摆脱django管理员的“delete_element”,将其设置为默认值。

from django.contrib import admin

from .models import Problemas
# Register your models here.
from django.contrib.admin.actions import delete_selected as delete_selected_


def delete_selected(modeladmin,request,queryset):
    for obj in queryset:
        if (obj.User==request.user.username or request.user.is_superuser):
            obj.delete()



class ProblemasAdmin(admin.ModelAdmin):
    list_display = ('Juez', 'Nombre', 'Categoria','Dificultad','URL','User')
    list_filter = ('Juez','Categoria','Dificultad','User')
    search_fields = ['Nombre']
    readonly_fields = ('User',)
    list_per_page = 20
    actions = [delete_selected]

    def save_model(self, request, obj, form, change):
        if (obj.User==""):
            obj.User = request.user.username
        obj.save()


    def delete_model(self,request,obj):
        for o in obj.all():
            if (o.User==request.user.username or request.user.is_superuser):
                o.delete()

    def has_change_permission(self,request,obj=None):
        return obj==None or request.user.username == obj.User or request.user.is_superuser
    def has_delete_permission(self,request,obj=None):
        return obj==None or request.user.username == obj.User or request.user.is_superuser

admin.site.register(Problemas,ProblemasAdmin)

1 个答案:

答案 0 :(得分:0)

@register(QuestionModel)
class QuestionModelAdmin(ModelAdmin):
     def has_change_permission(self,request,obj=None):
         return request.user == obj.owner
     def has_delete_permission(self,request,obj=None):
         return request.user == obj.owner

我认为应该有效