Ошибка загрузки файла с использованием ModelForm - хотя сообщений об ошибках нет

Я использую ModelForms с общими представлениями редактирования (создание, обновление, удаление). Одна из моих целей в этом упражнении — познакомиться с некоторыми фреймворками (Django + Bootstrap + плагин (например, PDF.js)) и использовать как можно меньше пользовательского кода.

Я могу создать запись «документ» через сайт администратора, и загрузка будет сохранена в папке «файлы», которую я установил. Когда я пытаюсь пройти через свой сайт, файл не загружается, хотя другие поля будут обновлены (очевидно, форма проверяется). (Field IS обнуляется, потому что я хочу иметь указатель на нецифровой актив). Соответствующий код:

    # 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. как вы думаете, что идет не так? Конечно, ModelForms с FileFields инициализируются с использованием «request.FILES», а также «instance» и «request.POST»?
  2. какой хороший способ получить отладочные сообщения о том, что на самом деле публикуется? Используя представления функций, я просто выталкивал «print («дошел до сюда, значение X равно», value_x) - есть ли лучший способ, чем просто перегрузка стандартных функций ModelForms и т. д.?

person Atcrank    schedule 04.10.2017    source источник


Ответы (1)


Я пропустил это решение (stackoverflow), которое указало, что form нужен этот тег для корректной отправки материала в request.FILES.

<form action="" method="post" **enctype="multipart/form-data"**>
person Atcrank    schedule 04.10.2017