ImageField を含むモデルで django ModelForm を使用しています。以下に、わかりやすくするために一部の詳細を取り除いた一般的なバージョンを含めました。このスキームは私にとってはうまく機能しており、問題なくモデルから画像をアップロードして表示できます。
この場合の問題は、アップロードがモバイル デバイスから機能しないことです。Iphone 4、Ipad 2、および Android フォンでテストしました。どのデバイスもエラーを表示せず、ログにもエラーはありませんが、イメージのアップロードは単に失敗します。
この問題の原因が何か、またはこれが ModelForms と ImageFields の既知の問題であるかどうかを知っている人はいますか? 似たようなモデルがたくさんあり、メンテナンスが容易になるため、ModelForms を引き続き使用したいと思っていますが、現時点ではカスタム オプションを検討しています。
Google はこれまでのところ有用な情報を提供していません。誰かがこれを理解するために正しい方向を指し示すことができれば、それは大歓迎です。
私のモデルは次のようになります (簡潔にするためにいくつかのフィールドが削除されています):
class myModel(models.Model):
notes = models.CharField(max_length=2000)
image = models.ImageField(upload_to="room_images/")
last_updated = models.DateTimeField(auto_now=True)
私の ModelForm は、1 つのカスタム TextArea フィールドで次のようになります。
class MyForm(forms.ModelForm):
notes = forms.CharField(widget=forms.Textarea, required=False)
class Meta:
model=MyModel
これに似たものでModelFormをレンダリングしています(オブジェクト名は一般的な同等のものに変更されています)。
<form id="myForm" action="{% url my_url %}?param_one={{ object.pk }}¶m_two={{ anotherobject.pk }}" enctype="multipart/form-data" method="post">
{% csrf_token %}
{{ form.as_p }}
<input id="saveSomething" class="nice small blue button" type="submit" value="Save" />
</form>
私のビューは次のようになります (ここでも、わかりやすくするために一部を省略しています)。
@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()