Djangoを使ってアップロードをしようとしています。アップロードしようとするとエラーは発生せず、新しい項目は保存されますが、画像はありません。他のフォームデータはすべてそこにあります。私は過去2日間、グーグルでスタックオーバーフローが発生しており、修正を見つけることができません。私はそれが間違っていることを知りません!どんなアドバイスも素晴らしいだろう。本当にありがとう。 :) views.pyからDjangoフォームイメージをアップロードする - フォームデータは画像以外のものを扱います
:
if request.method == 'POST':
form = ItemForm(request.POST, request.FILES, user=request.user, forsale=True)
if form.is_valid():
new_item = form.save()
return item_view(request, marketplace_id, new_item.id)
else:
form = ItemForm(user=request.user)
models.pyから:
class Item(models.Model):
photo = StdImageField(upload_to='images/', blank=True, size=(500, 500, True), thumbnail_size=(210, 150, True))
user = models.ForeignKey(User)
...
def __unicode__(self):
return self.name
class ItemForm(ModelForm):
class Meta:
model = Item
fields = ['name', 'description', 'price', 'shipping', 'photo', 'section']
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(ItemForm, self).__init__(*args, **kwargs)
テンプレートから:
<form enctype="multipart/form-data" action="" method="post" data-ajax="false">{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper" data-role="fieldcontain">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" value="Save">
</form>
私はそれを見ると、テンプレートが正しいですか。 Itemモデルは上手く見えますが、StdImageFieldはImageFieldのラッパーです。それは管理パネルで正常に動作します。 フォームは上手く見えますが、特別なものはありません。 私のviews.pyでは、POSTリクエストをチェックし、ItemFormを呼び出し、request.POSTとrequest.FILES(そしてforsaleはブール値)を渡します。フォームが有効かどうかチェックし、そうであれば保存します。なぜそれは働いていないのですか?アイテムは保存されますが、管理パネルには「写真」に関連するファイルはありません。
私はデバッグをお勧めします:)また、生成されたフォームhtmlを見て、 'request.FILES'を見るのを助けるかもしれません。 'StdImageField'クラスは正しいですか、それは標準の' ImageField'で動作しますか?他のビューの中で別のビューを呼び出すことも悪い考えです。代わりにリダイレクトが必要です。 – demalexx