Je suis incapable d'obtenir un fichier dans mon champ de fichier dans mon ModelForm. Le fichier est soumis et le nom du fichier est dans la requête POST correspondante, mais le form.is_valid()
échoue car il déclare {'the_file': [u'This field is required.']}
Django forms: "Ce champ est obligatoire" lorsque le fichier POSTed au champ de fichier
J'ai écrit un ModelForm pour un modèle avec un champ de fichier et une clé étrangère à un autre modèle, ainsi:
class AccountFile(models.Model):
the_file = models.FileField(upload_to='{}/%Y/%m/%d/'.format(
settings.MEDIA_ROOT,
))
account = models.ForeignKey(
Account,
blank=True,
null=True,
related_name='account_files'
J'ai ensuite généré un formulaire pour télécharger un fichier, ainsi:
class UploadFileForm(forms.ModelForm):
class Meta:
model = models.AccountFile
fields = ['the_file' ]
def clean_file(self):
file = self.cleaned_data.get("the_file", False)
filetype = magic.from_buffer(file.read())
if not "pdf" in filetype:
raise forms.ValidationError("File is not pdf.")
return file
Mise en une validation très basique (qui sera prolongée!) quand je peux obtenir au moins une chose à travail.
La forme est traitée comme ceci:
if request.method == 'POST':
form = forms.UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return redirect(
'account_url',
acc_manager_pk=acc_manager.pk,
account_pk=account.pk,
)
else:
form = forms.UploadFileForm()
C'est sur Django 1.7
Merci beaucoup! J'ai lu cette page environ 10 fois et je l'ai vu lors de la première lecture, mais je l'ai manqué tous les deux lu pour découvrir ce que j'avais manqué. Sur la prochaine erreur! –