我有一个非常简单的图像模型
class Image(Model):
owner = ForeignKey(User)
img = ImageField(upload_to=image_file_path)
image_file_path
解析为<username>/images/
其中username
是图片模型实例&#39; s owner.username
现在,当使用Django admin更改图像的所有者时,我希望将物理图像文件移动到适当的路径,即<new_username>/images/
。
什么是最简单的&#34;正确的&#34;这样做的方式?
编辑:
经过一些实验后的一些想法
post_save
处理程序:我们的想法是通过在模型更改后将文件移动到正确的位置来确保模型是正确的。问题是如果发生了不好的事情 - 文件丢失/传输错误(例如,如果存储在S3上并且连接不好)/等等 - 那么你可以在循环中尝试恢复更改或最终模型/ FS状态不一致
Django管理员行动:这似乎是一种更安全的方式,因为您可以复制文件,检查它是否正常,然后更改模型,检查它是否正常,然后删除旧文件。如果有任何中断,您可以中止,因为这是从管理界面手动启动的,因此用户不会遇到不一致的行为。
pre_save
:与&#39; Django管理员操作相同的过程&#39;可能与pre_save
一起使用,但如果由于问题而中止,则用户体验会受到影响。另一方面,如果复制/移动文件被剔除,用户无论如何都无法上传任何内容。
有第四种方式吗? Django中的模型是否有消毒杀菌剂?