从 wagtail 外部上传 Wagtail 图像

2023-11-30

在无法子类化的 Django 模型中Page,我想转换现有的 ImageField 以使用 Wagtail 图像。我将该字段重新定义为:

avatar = models.ForeignKey(
    'wagtailimages.Image', null=True, on_delete=models.SET_NULL, related_name='+'
)

用户需要能够将图像上传到他们的个人资料视图。在 Django 视图的 forms.py 中,我有:

avatar = forms.ImageField(
    label='Your Photo', required=False,
    error_messages={'invalid': "Image files only"}, widget=forms.FileInput())

当我将图像上传到视图时,它崩溃了:

Cannot assign "<InMemoryUploadedFile: filename.jpg (image/jpeg)>":
"UserProfile.avatar" must be a "Image" instance.

我很确定问题出在表单中的字段定义,但我无法弄清楚正确的定义应该是什么。

我知道我需要手动将图像附加到用户配置文件和集合中,但需要首先解决此错误。或者尝试在非 WT 模型中使用单独的 WT 字段是一个坏主意吗?谢谢。


这里的问题是avatar您的模型上的ForeignKey字段期望接收一个实例wagtailimages.Image模型。这ImageField表单上的 无法提供此功能 - 它仅提供一个文件对象。为了完成这项工作,您需要设置表单(我假设是 ModelForm)来创建wagtailimages.Image与您自己的模型同时对象。应该可以通过自定义来做到这一点save方法如下:

  • Rename avatar = forms.ImageField与不冲突的东西avatar模型字段,例如avatar_image
  • 确保这件事avatar_image包含在您的 ModelForm 中fields定义,但是avatar不是。在此刻,avatar_image只是表单上的一个额外字段,与模型没有任何联系。
  • 定义以下内容saveModelForm 上的方法:

    from wagtail.images.models import Image
    
    def save(self, commit=False):
        if not commit:
            raise Exception("This form doesn't support save(commit=False)")
    
        # build the instance for this form, but don't save it to the db yet
        instance = super(MyForm, self).save(commit=False)
    
        # create the Image object
        avatar = Image.objects.create(
            file=self.cleaned_data['avatar_image'],
            title="Image title"
            # you may need to add more fields such as collection to make it a valid image...
        )
    
        # attach the image to your final model, and save
        instance.avatar = avatar
        instance.save()
        return instance
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 wagtail 外部上传 Wagtail 图像 的相关文章

随机推荐

  • 有没有简单的方法来防止输入回声?

    如何防止输入时出现回声 尝试过 getpass 但没有运气 在 Windows IDLE 上 它不起作用 Python 3 3 2 v3 3 2 d047928ae3f6 May 16 2013 00 03 43 MSC v 1600 32
  • SMT 求解器中约束强化的效率

    解决优化问题的一种方法是使用 SMT 求解器来询问是否存在 坏 解决方案 然后逐步添加更严格的成本约束 直到命题不再可满足 例如 该方法在以下内容中进行了讨论 http www lsi upc edu oliveras espai pape
  • 找出创建满足 m 个条件的长度为 n 的序列 A 的多种方法

    找出创建满足 m 个条件的长度为 n 的序列 A 的多种方法 该序列 A 应仅包含非负数 每个条件由三个整数 i j k 描述 表示 max A i A j k 保证序列的每个索引至少在一种情况下存在 即存在有限数量的此类序列 n 的最大值
  • 在 scrapy 的 start_requests() 中返回项目

    我正在编写一个 scrapy 蜘蛛 它将许多 url 作为输入并将它们分类 作为项目返回 这些 URL 通过我的爬虫程序提供给蜘蛛程序start requests method 有些网址不需要下载就可以分类 所以我想yield直接Item对
  • 将图像绑定到 URL Xamarin 表单 XAML

    我在使用 Xamarin Forms 将图像绑定到 UriImageSource 时遇到问题 我已经实现了 FlowListView 它呈现一个类似网格的文本列表 但与每个产品关联的图像没有出现 还有其他人遇到过这个问题 知道如何解决它吗
  • 将图像添加到 Axlsx 生成的 Excel 文件中。?

    我在用Axlsx用于生成 Excel 文件 我需要将图像添加到 Excel 文件中 我用过这个代码 ws add image image src gt something noSelect gt true noMove gt true do
  • 使用 Paramiko 进行目录传输

    如何使用Paramiko传输完整的目录 我正在尝试使用 sftp put Folder1 Folder2 这给了我这个错误 错误 Errno 21 是一个目录 您可以子类化 paramiko SFTPClient 并向其添加以下方法 imp
  • iOS 应用商店评级(跟踪用户的操作)

    使用下面的代码我可以要求用户在应用程序商店中对应用程序进行评分 if available iOS 10 3 SKStoreReviewController requestReview else Fallback on earlier ver
  • Spring Integration 消息流中的条件重试建议?

    我有一个 http 网关调用 偶尔会返回 503 错误 我想配置重试建议围绕该调用 但我不想对每个错误都执行此操作 而只是 503
  • 使用 shell_exec 从 php 调用 perl 脚本

    我在使用 shell exec 函数从 php 执行 perl 脚本时遇到问题 这是我尝试过的 并且之前已经成功 perl shell exec usr bin perl cbh script clean pl echo perl 这将不起
  • D3.js 带有嵌套 svg 的缩放会破坏 Internet Explorer 中的视口

    我正在使用 d3 js 动态设置嵌套 svg 即嵌套在封闭 svg 内的内部 svg Ad3 behavior zoom 监听外部 svg 上的缩放事件并进行所需的转换 除了 Internet Explorer IE 11 之外 一切正常
  • 保存 DocumentSnapshot 以在 Firestore android 中进行分页

    我正在尝试在android 中实现分页功能 每次活动开始时我想从集合中获取新的 10 条记录 下次当我打开活动时 最后可见 文档快照 必须保存在 SharedPreference 中才能获取新列表 db FirebaseFirestore
  • JFreeChart StackedXYAreaRenderer 导致图表中出现“卷曲”

    在本例中 我使用 JFreeChart 显示随时间变化的两组数据的堆积折线图dogs and cats import java text ParseException import java text SimpleDateFormat im
  • 使用不带模板参数的模板类

    我有一个带有模板类的 Visual Studio 2008 C 项目 该模板类在构造函数中采用模板化值 如下所示 template lt typename A gt struct Foo const A a Foo const A a a
  • 可以使用具有多个选项卡/工作表的 csv 吗?

    我正在调用 Web 服务 并且来自 Web 服务的数据采用 csv 格式 如果我尝试将数据保存在 xls xlsx 中 那么我会在工作簿中得到多个工作表 那么 如何在 C 中使用多个选项卡 工作表将数据保存在 csv 中 我知道具有多个选项
  • 在 Android 中将视频上传到 Facebook

    Problem 我的视频没有上传到 Facebook Question 如何将视频上传到 Facebook Note 我可以从我的画廊上传图片 没有Exceptions被抛出 我认为线路有问题 params putString filena
  • 同源策略和 CORS - 有什么意义?

    我在理解同源策略和 解决 它的不同方法时遇到了一些困难 显然 同源策略是作为一种安全措施而存在的 因此来自服务器 域的脚本无法访问来自另一服务器 域的数据 同样清楚的是 有时 能够打破此规则是有用的 例如 混搭应用程序访问来自不同服务器的信
  • AJAX 返回带有输出的 HTML 代码

    尝试了一些解决方案后this和许多其他问题我无法弄清楚我的代码中的确切问题是什么 我的代码 document ready function botname blur function ajax type POST url tukaiexot
  • vscode g++ 找不到 .cpp 定义文件

    我正在尝试使用多个 cpp 和 hpp 文件编译 C 示例 但 g 找不到任何成员函数定义 主要 cpp include
  • 从 wagtail 外部上传 Wagtail 图像

    在无法子类化的 Django 模型中Page 我想转换现有的 ImageField 以使用 Wagtail 图像 我将该字段重新定义为 avatar models ForeignKey wagtailimages Image null Tr