簡體   English   中英

如何使用pre_save信號檢查django admin中是否選擇了新文件?

[英]How to check if a new file was selected in django admin using a pre_save signal?

我有一個具有ImageField屬性的模型。

我使用django管理員更新了模型對象,並且在嘗試更新對象時上傳新圖像時,我需要一些刪除舊圖像的方法。

因此,我創建了一個pre_save信號,當用戶嘗試更新模型對象時,該信號應從服務器上刪除舊的圖像文件。

問題是:當用戶更新除ImageField屬性以外的對象的屬性時,信號仍將刪除本地保存的圖像文件。

僅在django admin中選擇了新文件時,如何更改信號以刪除文件?

換句話說,我需要在嘗試在django admin中更新對象時檢查用戶是否上傳了文件。

重要說明:我的信號適用於許多型號。.我需要保持這種狀態。

這是信號代碼:

@receiver(pre_save)
def pre_save_image_delete(sender, instance, **kwargs):
    if not valid_model(sender.__name__):
        return

    # Get file path on the server
    path = get_photo_path(sender.__name__, instance.pk)

    # delete the file if it exists
    if path and file_exists(path):
        delete_file(path)

經過許多嘗試后,這是解決方案:

if str(photo.path) == str(photo.file):
    return

上面的代碼只有在對象更新過程中沒有上傳新文件的情況下才是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM