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管理员中,当用户选择所有文件并进行批量删除时,我只想删除满足特定条件的文件,并保留其余文件。我更新了我的答案,希望它能帮到您。祝你好运你的答案+阅读文章帮我解决了这个问题。谢谢希望听到这个。祝你好运