はじめまして、平野と申します。
Django1.0を使って画像をアップロードする仕掛けを作っています。
そこで、ImageFieldを用いた画像の保存処理を行わせたいのですが、
うまくいかず詰まってしまっています。
自分はこうやったよーと言ったアドバイスを頂ければと思い投稿しました。
以下、状況となります。
(
http://d.hatena.ne.jp/Lambda_groove/より)
========================================================
Django1.0を使った画像のアップロードで詰まった。
何がダメだったかまとめてとりあえず対策を調査。
どこかが間違っているコード。
views.pyの抜粋
if request.method == 'POST':
form = ArticleSubmitForm(request.POST, request.FILES)
if form.is_valid():
form.full_clean()
cleaned_data = form.cleaned_data
pub_date = forms.DateTimeField()
cleaned_pub_date = pub_date.clean(datetime.datetime.now())
article = Article()
article.subject = cleaned_data["subject"]
article.body = cleaned_data["body"]
article.photo_name = cleaned_data["photo_name"]
article.image = cleaned_data["image"]
article.pub_date = cleaned_pub_date
article.save()
views.pyの抜粋の続き
class ArticleSubmitForm(forms.Form):
subject = forms.CharField(label="タイトル",
max_length=200,
required=True)
body = forms.CharField(label="本文",
max_length=2000,
widget=forms.Textarea,
required=True)
photo_name = forms.CharField(label="写真の説明",
max_length=200,
required=True)
image = forms.ImageField(label="ファイル",
widget=forms.FileInput,
required=True)
models.py
from django.db import models
class Article(models.Model):
subject = models.CharField(max_length=200)
body = models.TextField(max_length=2000)
photo_name = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
image = models.ImageField(upload_to="img")
class Admin:
list_display = ("subject",
"body",
"photo_name",
"pub_date",
"image",
)
状態。
登録処理自体は走る。
そして画像がsettings.pyのMEDIA_ROOT/imgに保存されない。
ディスクの中身を片っ端から探したがどこにも画像はいない。
保存できてないのに例外すら出ないという事はさておき、
バグ取りのとっかかりすらない状態。
対策。
* リクエスト側の<input type="file" />から送信されるファイルデータは、必ず<form
enctype="multipart/form-data">から送らせること。基本だが忘れてた。
* PILはインストールしてあるか?ないとsyncdbした際エラーが吐かれる。ImageFieldを使いたかったのでインストールし
た。
* A2Cさんのブログのやり方でもダメだった。
* Vistaだからか?と思いLinux環境でも試したがダメ。
* piro_sukeさんのブログのやり方だと、必要なライブラリを配布しているサイトが死んでて試せず。
========================================================
以上、よろしくお願いします。