首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修改管理员变更页面中显示的消息?

如何修改管理员变更页面中显示的消息?
EN

Stack Overflow用户
提问于 2020-04-17 20:15:30
回答 1查看 340关注 0票数 1

我有一个模型文档,管理员可以上传图像到FileField。当文档/图像成功上传时,我还会保存该图像的sha256“指纹”,以测试管理员是否尝试上传重复的图像。如果检测到重复的图像,我不会保存重复的图像,并通过消息框架向管理员显示错误消息。但是,我也收到了文档已成功上载的消息。我如何才能防止这种情况发生?

我的代码缩写如下:

代码语言:javascript
运行
AI代码解释
复制
class Document(Model):
    document_id = models.AutoField(primary_key=True)
    computed_sha256 = models.CharField(editable=False, max_length=64, default="foobar")
    storage_file_name = models.FileField('File name', upload_to=settings.DOCUMENT_FOLDER_ORIGINALS, default=settings.DEFAULT_IMAGE_XXXLARGE_PATH,)

class DocumentAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        if form.is_valid():
            if not change:
                # Uploading one or more images
                files = request.FILES.getlist('storage_file_name')
                if files:
                    for f in files:
                        # Check if this file has been uploaded before by checking the fingerprint
                        _file = form.cleaned_data["storage_file_name"]
                        sha256 = image_processing_utils.compute_sha256(_file)
                        duplicate_files = Document.objects.filter(computed_sha256 = sha256)
                        if len(duplicate_files) > 0:
                            messages.add_message(request, messages.WARNING, 'Uploading a duplicate of "%s" and it will not be saved' % f.name)
                            break;
                        # more image processing stuff    
            else:
                # some more image processing stuff              
                obj.metadata = form.cleaned_data['metadata']
                super().save_model(request, obj, form, change)

当我尝试上传重复的图像时,出现的管理页面包含两条消息:

我不确定Django在哪里添加了图片上传正确的正面消息。如何删除它并仅显示未上传重复图像的消息?

谢谢!

标记

EN

回答 1

Stack Overflow用户

发布于 2020-04-17 22:09:21

在系统确定表单有效后,将在以下行发送成功消息:https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1244

这里没有一个很好的挂钩方法,但我认为这是因为您所做的工作实际上应该发生在表单上,而不是在save_model函数中。要查看如何在管理上编辑表单,请查看here。在该表单的clean方法上,您应该能够在上面的save_model方法中执行所有操作。

另一种选择是在发布警告消息之前清空消息。因此,您将拥有:

代码语言:javascript
运行
AI代码解释
复制
# Remove unnecessary success message
list(messages.get_messages(request))
messages.add_message(request, messages.WARNING, 'Uploading a duplicate of "%s" and it will not be saved' % f.name)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61279953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文