選択したファイルを保存しない ModelForm に問題があります。
フォームデータを受け取るビューの最初の行で pdb を使用してこれを見ました:
(Pdb) pp request.FILES
<MultiValueDict: {}>
enctype
属性はform
タグに設定されます。これは、少なくとも Chromium と Opera で発生します。
この問題に関する多くの質問を読みましたが、私の場合は何も役に立ちませんでした。それ以上のアイデアはありますか?
これは、モデルの関連部分です。
class AudioCut(models.Model):
slug = models.SlugField(max_length=128, unique=True)
logo = models.ImageField(upload_to=u'cuts_logos', blank=True)
これは次の形式です。
class AudioCutForm(ModelForm):
"Form for creating a new AudioCut"
start = SecondsSinceEpochField()
tags = TagsCommaSeparatedField()
class Meta:
model = AudioCut
fields = ('title', 'description', 'logo', 'start', 'length',
'category', 'tags', 'radio', 'show')
widgets = {'title': TextInput(attrs={'size': 34, 'maxlength': 32}),
'radio': HiddenInput(), 'show': HiddenInput(),
'tags': Textarea()}
これはビューです:
def make_new_cut(request):
if request.method == 'POST':
cutform = AudioCutForm(request.POST, request.FILES)
out_data['cutform'] = cutform
if cutform.is_valid():
newcut = cutform.save(False)
newcut.owner = request.user
newcut.save()
cutform.save_m2m()
そして、これはテンプレートです:
<form enctype="multipart/form-data" id="cut_this_frm" method="post" action="#">{% csrf_token %}
<label for="id_title">* Título</label>{{cutform.title}}
{{cutform.title.errors}}
<label for="id_description">Descipción</label>{{cutform.description}}
{{cutform.description.errors}}
<label for="id_tags">Etiquetas</label>{{cutform.tags}}
<span class="help_text">Separe las etiquetas con comas (,)</span><br/>
{{cutform.tags.errors}}
<input type="button" class="image_upload"/><label for="id_logo" class="image_upload">Agregar imagen</label>{{cutform.logo}}<span id="logo_filename"> </span>
{{cutform.radio}}{{cutform.show}}{{cutform.start}}{{cutform.length}}
<div class="errors">{{cutform.non_field_errors}}</div>
<input type="hidden" name="next_url" id="next_url" value="#"/>
<div class="save_cut"><input type="reset" value="Cancelar"/><input type="submit" value="Guardar"></div>
</form>
私がチェックした他のシン、画像が保存されているフォルダーが存在し、サーバーがそれに書き込むことができます。Djangoの管理者で問題なく画像を追加できます。
localhost:62080 で開発サーバーを実行しています。