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