Django 1.3 更改了具有 FileField
的模型的行为,以便在删除实例时保留实际文件。对于大多数用途来说,这很好。但是,我正在测试一个大量使用 ImageField
的应用程序,最终我的开发上传目录中出现了数百个无用的剩余图像。由于它是开发中的,所以这不是什么大问题,但我更愿意在测试后自行清理。
测试时让这些图像不徘徊的最佳方法是什么?。我强调这一部分是因为我不想使用 delete
覆盖等全面修改此行为。
最佳答案
我崩溃了并妥协了一点。我决定继续使用覆盖的 delete
,但我根据传递 include_images=True
kwarg 来删除实际的图像文件。
class Photo(models.Model):
...
def delete(self, *args, **kwargs):
if kwargs.pop('include_images', False):
for field in self._meta.fields:
if type(field) == models.ImageField:
image = self.__getattribute__(field.name)
if image.name != '':
image.storage.delete(image.name)
super(Photo, self).delete(*args, **kwargs)
然后,我修改了测试用例中的 tearDown
方法,如下所示:
def tearDown(self):
for p in Photo.objects.all():
p.delete(include_images=True)
我对这个解决方案并不完全满意,但它是我能达到的最接近我认为理想的解决方案。这实际上应该全部由测试本身来处理。
关于django - 在 Django 1.3 中使用 ImageFields 测试模型时防止残留图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434422/