以下のような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 %}
何かお気づきの点がありましたらアドバイス御願い致します.
最近開発版に加えられた変更で、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/
ご指摘の方法で正しく動きました.ありがとうございます.
また,Masudaさんが仰る通り本家のドキュメントhttp://www.djangoproject.com/docu
mentation/newforms/に書いてありました.“Binding uploaded files to aform”の章
です.
開発版使うなら英語かソース読まないとだめですね…
|最近開発版に加えられた変更で、ImageFieldやFileFieldを含むモデルからフォーム