gpt4 book ai didi

python - django:在对象上调用 delete 不会删除文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:51 25 4
gpt4 key购买 nike

所以我有以下模型。

class StoreSegments01(models.Model):
segment = models.FileField(upload_to=content_file_name)
segmentID = models.TextField(max_length=100, default=11)

class StoreSegments01Form(forms.ModelForm):
class Meta:
model = StoreSegments01
fields = ['segment', 'segmentID']

def content_file_name(instance, filename):
return '{0}'.format(instance.segmentID)

我想为用户提供一种删除文件的方法。在 manage.py shell 中,我尝试以下操作:

obj = StoreSegments01.objects.get(segmentID='239fd363-562a-41b3-a915-b7a84cc4a172')
>>> obj.delete()

删除与指定segmentID相关的记录,但与该ID相关联的文件还在。我对查询集进行了同样的尝试,但文件仍未删除。

我在这里错过了什么?

最佳答案

这里有一个使用信号的替代方法:覆盖模型的 delete 方法。

例子:

class StoreSegments01(models.Model):
segment = models.FileField(upload_to=content_file_name)
segmentID = models.TextField(max_length=100, default=11)

def delete(self, *args, **kwargs):
# first, delete the file
self.segment.delete(save=False)

# now, delete the object
super(StoreSegments01, self).delete(*args, **kwargs)

对于 Python 3,像这样调用 super:super().delete(*args, **kwargs)

注意! : 如果您删除单个对象,这会起作用。但是,如果您批量删除对象,则不会删除关联的文件。因为删除单个对象调用model.delete()方法,而批量删除调用queryset.delete()方法。感谢Håken Lid谁在下面的评论中指出了这一点。

关于python - django:在对象上调用 delete 不会删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com