簡體   English   中英

當文件已存在時在管理面板中顯示消息

[英]Display message in admin panel when file already exists

我的問題是如何在 admin django (v 1.11) 中顯示一條關於想要放入應用程序的文件存在的消息。

我已經寫好了代碼,但它只在模型中起作用,即在控制台中您可以看到出現ValidationError

class ImageModel(BaseImageModel):
    desc = models.CharField(max_length=256, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.has_all_mandatory_data = self._check_validity()
        if ImageModel.objects.filter(original_filename=self.file).exists():
            raise ValidationError('This image already exists.')
        super(ImageModel, self).save(*args, **kwargs)

如何在 admin messages.INFO("File already exists")而不是ValidationError

如果您在 save() 方法中引發 ValidationError ,那么它應該可以工作(您在控制台中的體驗),但是默認情況下 Django 的管理員無法很好地處理此類服務器響應。

有一個解決方法,Django 的管理員可以很好地處理從模型的 clean() 方法之一引發的 ValidationError,參見 1.11: https : //docs.djangoproject.com/en/1.11/ref/models/instances/#validating -對象

因此,我建議在 Django 提供給我們的 clean() 方法之一中編寫檢查存在的邏輯,而不是在 save() 方法中編寫它。

class ImageModel(BaseImageModel):
  desc = models.CharField(max_length=256, null=True, blank=True)

  def clean(self):
    if ImageModel.objects.filter(original_filename=self.file).exists():
      raise ValidationError('This image already exists.')

  def save(self, *args, **kwargs):
    try:
      self.clean()
      super(ImageModel, self).save(*args, **kwargs)
    except ValidationError as e:
      non_field_errors = e.message_dict[NON_FIELD_ERRORS]

暫無
暫無

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

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