我是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)
答案 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
我认为应该有效