0

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:

  1. que pensez-vous qui va mal? ModelForms avec FileFields initialise sûrement en utilisant 'request.FILES' aussi bien que 'instance' et 'request.POST'?
  2. 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?

Répondre

0

J'avais négligé cette solution (stackoverflow), qui a souligné que la forme a besoin de cette balise pour envoyer correctement le matériel à request.FILES.

<form action="" method="post" **enctype="multipart/form-data"**>