伙计们,我需要帮助来了解有关Django如何保存模型文件的一些详细信息。我编写了一个涉及创建文件的测试(通过tempfile
在临时目录中),并且具有以下几行:
TEMP_DIR = tempfile.TemporaryDirectory()
TEMP_DIR_PATH = TEMP_DIR.name
...
@override_settings(MEDIA_ROOT=TEMP_DIR_PATH)
def create_photo(self, album_number, photo_number):
...
p = Photo.objects.create(
number=photo_number,
album=album,
added_by=self.user,
image=SimpleUploadedFile(
name=...,
content=open(..., 'rb').read(),
content_type='image/jpeg'
),
remarks='-'
)
p.full_clean()
p.save()
return p
除了使我困惑的一件事之外,此代码有效。行p = Photo.objects.create
使文件出现在临时目录中。然后p.full_clean()
对文件不执行任何操作。但是,当我执行p.save()
时,文件将从临时目录中消失。如果删除p.save()
,则函数返回时文件将保留在该位置。
所以我的测试功能
def test_image_file_present(self):
"""When a photo is added to DB, the file actually appears in MEDIA."""
p = self.create_photo(3, 2)
image_filename = p.image.file.name
if not os.path.exists(image_filename):
self.fail('Image file not found')
如果有p.save()
,则失败,但如果我删除p.save()
,则通过。
为什么object.save()
会导致文件消失?
作为一个额外的问题,如果文件和Django模型对象已经在.save()
中出现,Photo.objects.create
的目的是什么?我检查了pre-save
和Photo.object.create()
是否发送了p.save()
信号。