文件已存在时在管理面板中显示消息

Posted

技术标签:

【中文标题】文件已存在时在管理面板中显示消息【英文标题】:Display message in admin panel when file already exists 【发布时间】:2019-06-24 20:52:16 【问题描述】:

我的问题是如何在 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)

如何在管理员中显示messages.INFO("File already exists") 而不是ValidationError

【问题讨论】:

请问,您的问题是您在管理站点上收到未模板化的服务器错误 (ValidationError),而需要一条不错的消息? @AlexanderStrakhov 而不是终端中的“ValidationError” 我想在管理面板中使用“messages.INFO”。 【参考方案1】:

如果您在 save() 方法中引发 ValidationError,那么它应该可以工作(您在控制台中遇到的情况),但默认情况下 Django 的管理员无法很好地处理此类服务器响应。

有一个解决方法,Django 的管理员可以很好地处理从模型的 clean() 方法之一引发的 ValidationError,请参阅 1.11:https://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects。

因此,我建议在 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]

【讨论】:

感谢您的回答。但是请告诉我这里是messages.INFO的地方 - 我们需要request 我认为 Django 的管理员默认不会看到 messages.info。不过,上面的方法应该默认工作。

以上是关于文件已存在时在管理面板中显示消息的主要内容,如果未能解决你的问题,请参考以下文章

在WordPress管理面板中显示紧急消息

如何在插件激活的管理面板中显示通知?

Prestashop 文件管理器源弹出窗口显示管理面板

nvidia控制面板打不开,提示程序出现问题

电脑显示不存在wifi怎么办?

Sonata 管理仪表板中仅显示两个管理面板