2017-10-04 21 views
0

ModelFormsを一般的な編集ビュー(作成、更新、削除)で使用しています。この練習の私の目的の1つは、いくつかのフレームワーク(Django + Bootstrap +プラグイン(例:PDF.js))を知り、可能な限り小さなカスタムコードを使用することです。ModelFormを使用したファイルのアップロードに失敗しましたが、エラーメッセージは表示されません。

管理者サイトから「文書」レコードを作成できます。アップロードは設定した「ファイル」の場所に保存されます。自分のサイトを試してみると、ファイルはアップロードされませんが、他のフィールドは更新されます(明らかにフォームが検証されます)。 (非デジタル資産へのポインタを持つことができるため、FileFieldはNULLを使用できます)。関連するコード:

# models.py 
class document(models.Model): 
    ref_file = models.FileField(upload_to='documents/', blank=True, null=True) 

    def get_absolute_url(self): 
     return reverse('knowledge_manager:doc_detail', kwargs={'pk': self.pk}) 

# urls.py 
urlpatterns = [ 
    url(r'^doc$', views.docIndex.as_view(), name='doc_index'), 
    url(r'^doc/(?P<pk>\w+)/det', views.docUpdate.as_view(), name='doc_detail'), 
    url(r'^doc/new/$', views.docCreate.as_view(), name='doc_create'), 
    url(r'^doc/(?P<pk>\w+)/update', views.docUpdate.as_view(), name='doc_update'), 
    url(r'^doc/(?P<pk>\w+)/del', views.docDelete.as_view(), name='doc_delete') 

] 

# views.py 
class docIndex(generic.ListView): 
    model = document 
    template_name = 'knowledge_manager/_index.html' 
    context_object_name = 'document_set' 

class doc_detail(generic.DetailView): 
    model = reference 
    template_name = 'knowledge_manager/doc_detail.html' 
    context_object_name = 'document' 
    form_class = doc_form 
    success_url = reverse_lazy('knowledge_manager:doc_index') 

class docCreate(generic.CreateView): 
    model = document 
    template_name = 'knowledge_manager/doc_detail.html' 
    form_class = doc_form 
    success_url = reverse_lazy('knowledge_manager:doc_index') 

class docUpdate(generic.UpdateView): 
    model = document 
    template_name = 'knowledge_manager/doc_detail.html' 
    context_object_name = 'document' 
    form_class = doc_form 
    success_url = reverse_lazy('knowledge_manager:doc_index') 

class docDelete(generic.DeleteView): 
    model = document 
    success_url = reverse_lazy('knowledge_manager:doc_index') 

# forms.py 
class doc_form(ModelForm): 
    class Meta: 
     model = document 
     fields = '__all__' 

質問:あなたは間違っているものだと思います

  1. ?確かに、 'request.FILES'と 'instance'と 'request.POST'を使用して、FileFieldsを持つModelFormsを初期化しますか?
  2. 実際に何が行われているのかについてのデバッグメッセージを表示するにはどうすればよいでしょうか。 投稿されていますか?ファンクションビューを使用して、私は 'print'(これは ここに値Xを 'value_xにしました)をポップすることでした - ModelFormsなどの標準関数をオーバーロードするよりも良い方法がありますか?

答えて

0

私はこの解決策を見落としていました(stackoverflow)。フォームはこのタグが正しくリクエストするためにこのタグを必要としていることを指摘しました。ファイル。

<form action="" method="post" **enctype="multipart/form-data"**> 
関連する問題