ImageFieldに対してform.is_valid()が常にFalseになる.

595 views
Skip to first unread message

立松 聖久

unread,
Aug 11, 2007, 1:19:54 AM8/11/07
to djan...@googlegroups.com
立松と申します.

以下のようなviewを書いておりますが,少しわからないことがあるのでアドバイ
ス御願い致します.

Python2.5.1
Django rev.5833
以上の環境で

view.py
def add(request):
ImageForm = forms.form_for_model(Image)
if request.method == 'POST':
new_data = request.POST
new_data.update(request.FILES)
form = ImageForm(new_data)
if form.is_valid():
......
......

これで,常にis_valid()がFalseになります.try,exceptで逃げようと思ったん
ですが,そうすると“このフィールドは必須です”というメッセージが出なかっ
たり,フォームに入力した値が消えてしまったりして不便なのでなんとか
form.is_validを動かしたいです.

以下にmodelとtemplateを記します.

model.py
class Image(models.Model):
image = models.ImageField('イメージ', upload_to = 'images/%Y/%m/%d', height_field= 'height', width_field = 'width')
height = models.PositiveIntegerField(editable = False)
width = models.PositiveIntegerField(editable = False)

template.html
{% block main %}
<form enctype="multipart/form-data" action="./" method="post">
<table>

<input type="file" name="image" />
//↑実際にはform.as_tableで書き出しています.//

</table>
<p><input type="submit" value="登録"></p>
</form>
{% endblock main %}

何かお気づきの点がありましたらアドバイス御願い致します.

Yasushi Masuda

unread,
Aug 11, 2007, 4:35:41 AM8/11/07
to djan...@googlegroups.com
立松さん

最近開発版に加えられた変更で、ImageFieldやFileFieldを含むモデルからフォーム
クラスを作成した場合、束縛フォームの生成時に空でないファイルデータを指定
しなければバリデーションに失敗するようになりました。そのため、束縛フォームの
生成では、::

new_data = request.POST
new_data.udapte(request.FILES)
form = ImageForm(new_data)

ではなく、::

form = ImageForm(request.POST, request.FILES)

にする必要があると思います。(最近の変更なのできちんと追跡していませんが、
少なくとも newforms.txt の記述は上記のように変更されています)。
試してみてください。

立松 聖久 さんは書きました:


--
Yasushi Masuda
http://ymasuda.jp/

立松 聖久

unread,
Aug 11, 2007, 5:00:27 AM8/11/07
to djan...@googlegroups.com
立松です.

ご指摘の方法で正しく動きました.ありがとうございます.

また,Masudaさんが仰る通り本家のドキュメントhttp://www.djangoproject.com/docu
mentation/newforms/に書いてありました.“Binding uploaded files to aform”の章
です.
開発版使うなら英語かソース読まないとだめですね…


|最近開発版に加えられた変更で、ImageFieldやFileFieldを含むモデルからフォーム

Reply all
Reply to author
Forward
0 new messages