Python Django管理批量删除排除某些查询集

Python Django管理批量删除排除某些查询集,python,django,Python,Django,我有一个文件模型的多个对象 我正在尝试根据特定条件筛选和删除这些文件,但未能成功 考虑以下事项 我有3个文件对象: 文件1 文件2 文件3 我试图覆盖模型的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:

我有一个
文件
模型的多个对象

我正在尝试根据特定条件筛选和删除这些文件,但未能成功

考虑以下事项 我有3个
文件
对象:

  • 文件1
  • 文件2
  • 文件3
我试图覆盖模型的
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()
@receiver(pre_delete, sender=File)
def delete_certain_files(sender, instance, **kwargs):
    test_qs = File.objects.filter(file_name='File1')
    test_qs.delete()
当我转到Django管理员时,选择所有文件(File1、File2和File3)并批量删除它们,所有文件都将被删除,而不仅仅是File1

在我的Django控制台中,File.objects.filter(File_name='File1')
返回一个只包含File1的查询集

我还试图像这样覆盖
pre_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()
@receiver(pre_delete, sender=File)
def delete_certain_files(sender, instance, **kwargs):
    test_qs = File.objects.filter(file_name='File1')
    test_qs.delete()
但是,这会导致出现
递归错误


如何确保在批量删除时只删除满足特定条件的
文件
对象?

因此,如果您想在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)

所以,如果你想把这个放在管理上。假设我们有
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)

为什么要在这里使用Django信号?(这就是引发RecursionError异常的原因)。只需过滤然后删除,有什么问题吗?此外,您不需要模型级的删除覆盖。在我的Django管理员中,当用户选择所有文件并进行批量删除时,我只想删除满足特定条件的文件,并保留其余文件。我更新了我的答案,希望它能帮到您。祝你好运你的答案+阅读文章帮我解决了这个问题。谢谢希望听到这个。祝你好运为什么要在这里使用Django信号?(这就是引发RecursionError异常的原因)。只需过滤然后删除,有什么问题吗?此外,您不需要模型级的删除覆盖。在我的Django管理员中,当用户选择所有文件并进行批量删除时,我只想删除满足特定条件的文件,并保留其余文件。我更新了我的答案,希望它能帮到您。祝你好运你的答案+阅读文章帮我解决了这个问题。谢谢希望听到这个。祝你好运