J'utilise ModelForms avec les vues d'édition génériques (créer, mettre à jour, supprimer). Un de mes objectifs dans cet exercice est de connaître quelques frameworks (Django + Bootstrap + un plugin (par exemple PDF.js)) et d'utiliser le moins possible de code personnalisé.Le téléchargement de fichier échoue en utilisant ModelForm - pas de messages d'erreur si
Je peux créer un enregistrement 'document' via le site Admin et le téléchargement est sauvegardé dans l'emplacement 'fichiers' que j'ai défini. Quand j'essaye mon site, aucun fichier n'est téléchargé, bien que les autres champs seront mis à jour (évidemment le formulaire valide). (Le champ FileField IS peut être validé, car je veux être en mesure d'avoir un pointeur vers un actif non numérique). Le code correspondant:
# 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__'
Questions:
- que pensez-vous qui va mal? ModelForms avec FileFields initialise sûrement en utilisant 'request.FILES' aussi bien que 'instance' et 'request.POST'?
- Quel est un bon moyen d'obtenir des messages de débogage sur ce qui est réellement être publié? En utilisant les vues de fonctions, j'ai juste utilisé pop 'print (' fait à ici, la valeur X est ', value_x) - y a-t-il un meilleur moyen que de surcharger les fonctions standard de ModelForms etc?