我有一个File
模型的多个对象。
我正在尝试根据特定条件过滤并删除这些文件,但未能成功。
我有3个File
对象:
我试图像这样重写模型的delete()
函数:
def delete(self, using=None, keep_parents=False):
test_qs = File.objects.filter(file_name='File1')
if test_qs:
for x in test_qs:
x.delete()
super(File, self).delete()
当我转到Django Admin时,选择所有文件(File1,File2和File3)并批量删除它们,所有这些文件都会被删除,而不仅仅是File1。
在我的Django控制台File.objects.filter(file_name='File1')
中,返回仅包含File1的查询集。
我还试图像这样覆盖pre_delete
信号:
@receiver(pre_delete, sender=File)
def delete_certain_files(sender, instance, **kwargs):
test_qs = File.objects.filter(file_name='File1')
test_qs.delete()
但是,这将导致RecursionError
如何确保在批量删除时仅删除满足特定条件的File
对象?
答案 0 :(得分:2)
因此,如果您希望在admin上使用此功能。想象我们有Foo模型和FooAdmin类
class FooAdmin(admin.ModelAdmin):
actions = ['delete_selected']
def delete_selected(self, request, queryset):
# request: WSGIRrequest
# queryset: QuerySet, this is used for deletion
lookup_kwargs = {'pk__gt': 5000} # you can add your own condition.
queryset.filter(**lookup_kwargs)
admin.site.register(Foo, FooAdmin)