文件已存在时在管理面板中显示消息
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。不过,上面的方法应该默认工作。以上是关于文件已存在时在管理面板中显示消息的主要内容,如果未能解决你的问题,请参考以下文章