- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 django 的新手,正在尝试将 google apps 脚本 (GAS) webapp 迁移到 django。
我在 google 网站上的一个功能是从剪贴板捕获粘贴的图像并通过表单提交。这是通过表单中的隐藏字段完成的:
<input type="hidden" name="summaryImage" id='summaryImage' value=''>
然后我捕获粘贴事件来填充这个隐藏的表单字段
/* Handle paste events */
function pasteHandler(e) {
if (e.clipboardData) {
// Get the items from the clipboard
var items = e.clipboardData.items;
if (items) {
// Loop through all items, looking for any kind of image
for (var i = 0; i < items.length; i++) {
if (items[i].type.indexOf("image") !== -1) {
// We need to represent the image as a file,
var blob = items[i].getAsFile();
var URLObj = window.URL || window.webkitURL;
var source = URLObj.createObjectURL(blob);
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById("summaryImage").value= reader.result;
}
reader.readAsDataURL(blob);
}
}
}
}
}
当通过 google 提交上述表单时,可以在服务器端 google apps 脚本 (GAS) 从表单中的 summaryImage 字段解析,如下所示:
var splitBase = form.summaryImage.split(','),
var type = splitBase[0].split(';')[0].replace('data:','');
var byteCharacters = Utilities.base64Decode(splitBase[1]);
var blob = Utilities.newBlob(byteCharacters, type);
现在,在 Django 中,我无法复制它。我在 models.py 中创建了一个带有 ImageField 的模型:
...
image = models.ImageField(blank=True, null=True, verbose_name='Image')
...
并在 forms.py 中将小部件设置为 HiddenInput()
class MyForm(forms.ModelForm):
class Meta:
model = myModel
fields = '__all__'
widgets = {
'image': forms.HiddenInput()
}
...
甚至在捕获粘贴时,我将其设置为这个隐藏的图像字段:
document.getElementById("id_image").value= reader.result;
但后来我无法提交表单,收到一条错误消息:
(Hidden field image) No file was submitted. Check the encoding type on the form.
我搜索了很多但找不到任何关于在 django 中从剪贴板捕获粘贴图像的提及。这甚至可行吗?
最佳答案
感谢@allcaps 的建议,我找到了解决方案。
基本上我在我的模型中保留了 ImageField(图像),并分配了一个自定义小部件以仅显示其 ID id_image
。然后在表单中添加一个隐藏的输入字段image_container
来接收粘贴的数据。表单的保存功能被覆盖以创建文件并将其保存回 ImageField。
class PictureWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
if str(value) == '':
html1 = "<img id='id_image' style='display:block' class='rounded float-left d-block'/>"
else:
html1 = "<img id='id_image' style='display:block' class='rounded float-left d-block' src='" + settings.MEDIA_URL + str(value) + "'/>"
return mark_safe(html1)
class MyForm(forms.ModelForm):
image_container = forms.CharField(required=False, widget=forms.HiddenInput())
class Meta:
model = MYMODEL
fields = '__all__'
widgets = {
'image': PictureWidget(),
}
def save(self, commit=True):
# check image_container data
self.instance.image.delete(False)
imgdata = self.cleaned_data['image_container'].split(',')
try:
ftype = imgdata[0].split(';')[0].split('/')[1]
fname = slugify(self.instance.title)
self.instance.image.save('path/%s.%s' % (fname, ftype), ContentFile(imgdata[1].decode("base64")))
except:
pass
return super(MyForm, self).save(commit=commit)
关于django - 如何使用 django modelform 通过复制/粘贴上传图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481931/
我基于几个 ModelForm 元素创建了一个表单。除了图像字段。由于缺少 ImageField form.is_valid() 总是返回 False - 即使我将 request.FILES 传递给
我需要将 CSS 类分配给表单字段,我指的是这篇 SO 帖子: CSS styling in Django forms 但是,我无法让它与扩展另一个 ModelForm 的 ModelForm 一起工
我是 Django 的新手,正在使用这个项目来学习它。我能够保存日志记录,但多对多关系不起作用。 这个“创建” View 显示了正确的形式,包括带有所有列出的加密货币的多选框(来自加密模型)。提交表单
为了确保强制用户从下拉列表中选择一个有效的值(而不是无意中保留列表集中的第一个选项而不将其更改为正确的值),我在许多必填表单域中插入了空白的选项域。。Models.py。原始forms.py(显式定义
我正在尝试使用 ModelForm 创建一个简单的 CRUD。它工作正常,只是每次我编辑时,保存都会创建一个新的数据实例。所以我编辑并在数据库中获得了一个额外的行而不是更新的行。我不知道它如何知道如何
Django 在其 ModelAdmin 对象上有自定义的“操作”,但我找不到与 ModelForm 对象类似的东西。我正在使用 Django-CMS,因此似乎无法轻松访问对象的 ListView ,
我正在尝试创建一个表单变量。默认播放器的级别为 0,他可以更改名称。以后到了1级,就可以改名字和头像了。当他3级时,他可以改变名字、头像和工作。等等... 模型.py: class Player(mo
现在正在尝试解决一个有趣的问题。 我有一个带有 image 的 Django 模型字段不是必需的,但在创建新模型实例时设置为默认值。 class Product(models.Model):
我发现Django中的ModelForm非常易于使用,并且节省了大量开发时间。 但是,当我意识到is_valid实际上保存了ModelForm时,我陷入了困境!我想知道这是否是预期的行为,还是我做错了
我的 modelForm 遇到了一个小问题,它可以工作,但是如果我尝试使用自定义 html,当我尝试遍历 form.bairro 时会出现错误。 我的型号: class Bairro(mode
在我的模型中,我有; title = models.CharField(verbose_name="eBay Listing Title",max_length=56) 使用 ModelForm,标签
我有一个非常基本的模型,上面有一个 ImageField,还有一个用于上传该图像的 ModelForm。我的表单失败,说我的图像无效,但是如果我直接从 request.FILES 实例化模型的图像,它
好的,我一直盯着这个几个小时试图弄清楚发生了什么,但无济于事。 我正在尝试使用“instance”关键字创建一个 ModelForm 以将其传递给现有模型实例,然后保存它。 这是 ModelForm(
我有模特: class TestPolja(models.Model): class Meta: verbose_name = 'Test polja' int
有这个禁用属性。但我无法将其应用于模型表单字段。我不知道该怎么做。我可以轻松地将它添加到 forms.Form 中。但是因为我使用的是小部件,所以我不知道在哪里插入它。 https://docs.dj
如何在我的模型表单中只保存选定的字段?文档对我没有帮助我的表格: class ProfileForm(forms.ModelForm): class Meta: model =
这里的 Django 初学者在让表单工作时遇到了很多麻烦。是的,我已经完成了教程并浏览了很多网络 - 我所拥有的是我在这里和其他网站上找到的东西的混合。我使用的是 Python 2.7 和 Djang
我有一个模型和一个表单 (forms.ModelForm),其中有一个 ImageField。该模型类似于: class Business(models.Model): business_na
我有一些带有用户字段的模型。 为此,我想创建一个表单混合,它将添加 self.user 实例(在 View 中提供给表单)。这可能吗? 这是示例 class UserFormMixin(object)
这个问题已经有答案了: How to update an object from edit form in Django? (2 个回答) 已关闭 7 年前。 我需要一个表格,允许在计划中创建或添加
我是一名优秀的程序员,十分优秀!