Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理员阻止删除最后一条记录_Django_Django Admin - Fatal编程技术网

Django管理员阻止删除最后一条记录

Django管理员阻止删除最后一条记录,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): ..

我是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):
.....
    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()
不会通过操作在批量删除中调用。在我看来,
具有删除权限()
正是这种功能的最佳位置。它所做的是确定用户是否有删除对象的权限。这不仅仅是关于实际的
用户。权限匹配,权限是一个宽泛的术语,可以用来检查剩余记录的数量、用户注册日期、月亮的相位,几乎任何东西。所以我相信我们在正确的地方:)。