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