Django ModelForm ImageField上载不适用于移动设备
我在包含ImageField的模型上使用django ModelForm。为了清晰起见,我在下面加入了一个通用版本,其中包含了一些细节。这个方案对我来说很好,我能够上传和显示模型中的图像,没有任何问题 在这种情况下,我的问题是从移动设备上传不起作用。我在iPhone4、iPad2和Android手机上进行了测试。没有任何设备显示任何错误,日志中也没有错误,但是图像无法上传 有人知道是什么导致了这个问题,或者这是ModelForms和ImageFields的已知问题吗?我真的很想继续使用ModelForms,因为我有很多类似的模型,这使维护更容易,但我现在正在考虑自定义选项 到目前为止,谷歌还没有提供任何有用的信息。如果有人能指出正确的方向来解决这个问题,我们将不胜感激 我的模型如下所示(为了简洁起见,删除了一些字段): 我的ModelForm与一个自定义TextArea字段类似:Django ModelForm ImageField上载不适用于移动设备,django,mobile,django-forms,django-models,Django,Mobile,Django Forms,Django Models,我在包含ImageField的模型上使用django ModelForm。为了清晰起见,我在下面加入了一个通用版本,其中包含了一些细节。这个方案对我来说很好,我能够上传和显示模型中的图像,没有任何问题 在这种情况下,我的问题是从移动设备上传不起作用。我在iPhone4、iPad2和Android手机上进行了测试。没有任何设备显示任何错误,日志中也没有错误,但是图像无法上传 有人知道是什么导致了这个问题,或者这是ModelForms和ImageFields的已知问题吗?我真的很想继续使用Model
class MyForm(forms.ModelForm):
notes = forms.CharField(widget=forms.Textarea, required=False)
class Meta:
model=MyModel
我使用类似的东西呈现模型表单(对象名称更改为通用等价物)
通过查看和,您的问题似乎来自jQuery Mobile
默认情况下,JQM将尝试通过ajax加载页面,以改善用户体验和转换
显然,当您在Django中发布到同一URL并希望手动处理它时,必须包含
data-ajax="false"
在您的情况下,这意味着将模板更改为:
<form id="myForm"
action="{% url my_url %}?param_one={{ object.pk }}¶m_two={{ anotherobject.pk }}"
enctype="multipart/form-data"
method="post"
data-ajax="false"> <!-- change is here -->
{% csrf_token %}
{{ form.as_p }}
<input id="saveSomething" class="nice small blue button" type="submit" value="Save" />
</form>
{%csrf_令牌%}
{{form.as_p}}
从:
这告诉框架重新加载整个页面以清除URL中的Ajax哈希
我自己没有尝试过,我只是从搜索中获得了信息。您是否尝试过从
ModelForm
中删除ImageField
,以确认是ImageField
导致了问题?表单工作正常,只是图像未能上传,因此没有真正的帮助。我很想听听成功使用移动设备上传ModelForm ImageField的人的意见。只是确认图像是否通过PC、笔记本电脑上传,mac?你可以使用Ripple
之类的工具来Chrome
或Firefox OS Simulator
之类的工具来Firefox
和firebug
一起使用,你可以看到控制台和对django
的请愿书,以及这些工具帮助你调试web应用程序的错误mobiles
我自己还没有机会测试这个,但是你的解释听起来似乎有道理,而且没有其他人提供替代方案,所以我要给你奖金。感谢您的研究,一旦我有机会测试,我也会将其标记为答案。
@login_required
def object_edit(request):
object_id = request.GET.get('param_one', None)
object2_id = request.GET.get('param_two', None)
if object_id:
object = get_object_or_404(myModel, pk=object_id)
if obejct.userprofile.user != request.user:
return HttpResponseForbidden()
if object_id and object2_id != 'None':
other_object = get_object_or_404(OtherModel, pk=object_id)
else:
other_object = OtherModel(object=object)
if request.POST:
form = myForm(request.POST, request.FILES, instance=other_object)
if form.is_valid():
form.save()
data-ajax="false"
<form id="myForm"
action="{% url my_url %}?param_one={{ object.pk }}¶m_two={{ anotherobject.pk }}"
enctype="multipart/form-data"
method="post"
data-ajax="false"> <!-- change is here -->
{% csrf_token %}
{{ form.as_p }}
<input id="saveSomething" class="nice small blue button" type="submit" value="Save" />
</form>