Ozz*_*zzy 1 django django-admin
我是 django 的新手,并且不断学习。
我有一个必须有 1 条记录的模型,因此我想防止删除最后一条记录。
模型.py
class SliderContent (models.Model):
name = models.CharField(max_length=40)
image = models.ImageField(upload_to='image')
Run Code Online (Sandbox Code Playgroud)
我在 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()
Run Code Online (Sandbox Code Playgroud)
这不起作用,我还查看了 pre_delete 接收器,但从我读到的内容来看,这不起作用,因为我正在使用管理视图中的构建。
做这个的最好方式是什么?
重写该has_delete_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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |