Django管理员阻止删除最后一条记录
我是django的新手,边走边学 我有一个必须有1条记录的模型,因此我想阻止删除最后一条记录 model.pyDjango管理员阻止删除最后一条记录,django,django-admin,Django,Django Admin,我是django的新手,边走边学 我有一个必须有1条记录的模型,因此我想阻止删除最后一条记录 model.py class SliderContent (models.Model): name = models.CharField(max_length=40) image = models.ImageField(upload_to='image') 我在admin.py中尝试了以下内容 class SliderContentAdmin(admin.ModelAdmin): ..
class SliderContent (models.Model):
name = models.CharField(max_length=40)
image = models.ImageField(upload_to='image')
我在admin.py中尝试了以下内容
class SliderContentAdmin(admin.ModelAdmin):
.....
def delete_model(self, request, obj):
if last_record:
storage = messages.get_messages(request)
storage.used = True
messages.error(request, 'Cannot delete last record.')
else:
obj.delete()
这不起作用,我也看过一个pre_delete接收器,但从我所读到的内容来看,这不起作用,因为我使用的是内置的管理视图
执行此操作的最佳方法是什么?重写
has\u delete\u permission()
方法:
from django.contrib.admin import helpers
class SliderContentAdmin(admin.ModelAdmin):
min_objects = 1
def has_delete_permission(self, request, obj):
queryset = self.model.objects.all()
# If we're running the bulk delete action, estimate the number
# of objects after we delete the selected items
selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
if selected:
queryset = queryset.exclude(pk__in=selected)
if queryset.count() <= self.min_objects:
message = 'There should be at least {} object(s) left.'
self.message_user(request, message.format(self.min_objects))
return False
return super(SliderContentAdmin, self).has_delete_permission(request, obj)
来自django.contrib.admin导入帮助程序的
类SliderContentAdmin(admin.ModelAdmin):
最小对象数=1
def具有删除权限(自我、请求、obj):
queryset=self.model.objects.all()
#如果我们正在运行批量删除操作,请估计数量
#删除选定项目后的对象数
selected=request.POST.getlist(helpers.ACTION\u复选框\u NAME)
如果选择:
queryset=queryset.exclude(pk\uu in=selected)
如果queryset.count()重写具有删除权限()
方法:
from django.contrib.admin import helpers
class SliderContentAdmin(admin.ModelAdmin):
min_objects = 1
def has_delete_permission(self, request, obj):
queryset = self.model.objects.all()
# If we're running the bulk delete action, estimate the number
# of objects after we delete the selected items
selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
if selected:
queryset = queryset.exclude(pk__in=selected)
if queryset.count() <= self.min_objects:
message = 'There should be at least {} object(s) left.'
self.message_user(request, message.format(self.min_objects))
return False
return super(SliderContentAdmin, self).has_delete_permission(request, obj)
来自django.contrib.admin导入帮助程序的
类SliderContentAdmin(admin.ModelAdmin):
最小对象数=1
def具有删除权限(自我、请求、obj):
queryset=self.model.objects.all()
#如果我们正在运行批量删除操作,请估计数量
#删除选定项目后的对象数
selected=request.POST.getlist(helpers.ACTION\u复选框\u NAME)
如果选择:
queryset=queryset.exclude(pk\uu in=selected)
if queryset.count()注意,delete\u model
方法必须删除该对象,并且不是为了否决。在哪里定义了last\u记录
?尝试使用count()
检查是否有最后一条记录请注意,delete\u model
方法必须删除该对象,并且不用于否决目的。在哪里定义了last\u record
?尝试使用count()
检查是否存在我要查找的最后一条记录,它适用于最后一条记录。批量删除不起作用,我想如果我能计算所选项目,我可以修改它,但我不知道我会使用什么?这段代码对delete\u model
有效吗?我想这不是权限问题,因此覆盖has\u delete\u permission
可能不是解决问题的更好方法problem@DaniloFreitas据我所知,在尝试删除单个模型时和批量删除操作之前都会调用has_delete_permission()
。这些是删除@Ozzy关注的方法。如果我错了,请纠正我。我想说的是,拥有\u delete\u权限
应该只用于检查权限问题。但我不知道是否有更好的方法@Ozzy您能在delete\u model
上试用此代码并告诉我们它是否有效吗?如果它不起作用,我想@AlexMorozov answer是更好的方法。@DaniloFreitas,delete\u model()
不会通过操作在批量删除中调用。在我看来,具有删除权限()
正是这种功能的最佳位置。它所做的是确定用户是否有删除对象的权限。这不仅仅是关于实际的用户。权限匹配,权限是一个宽泛的术语,可以用来检查剩余记录的数量、用户注册日期、月亮的相位,几乎任何东西。所以我相信我们在正确的地方:)。这就是我想要的,它适用于最后一个条目。批量删除不起作用,我想如果我能计算所选项目,我可以修改它,但我不知道我会使用什么?这段代码对delete\u model
有效吗?我想这不是权限问题,因此覆盖has\u delete\u permission
可能不是解决问题的更好方法problem@DaniloFreitas据我所知,在尝试删除单个模型时和批量删除操作之前都会调用has_delete_permission()
。这些是删除@Ozzy关注的方法。如果我错了,请纠正我。我想说的是,拥有\u delete\u权限
应该只用于检查权限问题。但我不知道是否有更好的方法@Ozzy您能在delete\u model
上试用此代码并告诉我们它是否有效吗?如果它不起作用,我想@AlexMorozov answer是更好的方法。@DaniloFreitas,delete\u model()
不会通过操作在批量删除中调用。在我看来,具有删除权限()
正是这种功能的最佳位置。它所做的是确定用户是否有删除对象的权限。这不仅仅是关于实际的用户。权限匹配,权限是一个宽泛的术语,可以用来检查剩余记录的数量、用户注册日期、月亮的相位,几乎任何东西。所以我相信我们在正确的地方:)。