如何更新FileField中的文件位置?

mim*_*imo 8 django filefield

我有FileField一个模型.对于模型的每个实例,我希望磁盘上的文件名保持更新,其中label包含模型的另一个字段(让我们称之为)的值.

目前,我使用自定义upload_to()函数,在首次上传新文件时生成正确的文件名.但是如果我更改了值label,则在保存模型时不会更新文件名.

save()模型的功能中,我可以(a)从label(也检查新名称与磁盘上的另一个现有文件不对应)计算新文件名,(b)重命名磁盘上的文件并(c)设置新的文件位置FileField.但有没有更简单的方法呢?

Ray*_*nda 6

此处发布的所有解决方案以及我在网络上看到的所有解决方案都涉及使用第三方应用程序或您已有的解决方案。

我同意@Phillip,没有更简单的方法可以做您想做的事,即使使用第三方应用程序,也需要做一些工作才能使其适应您的目的。

如果您有许多需要这种行为的模型,只需实现一个pre_save信号并只编写一次该代码。

我建议您也阅读Django Signals,我相信您会发现它非常有趣。

非常简单的例子:

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Product)
def my_signal_handler(sender, instance, **kwargs):
    """
    Sender here would be the model, Product in your case.
    Instance is the product instance being saved.
    """
    # Write your solution here.
Run Code Online (Sandbox Code Playgroud)