J'ai eu cette erreur lorsque j'ai essayé de télécharger et d'enregistrer un zip de plusieurs fichiers dans le FileField du formulaire. De la conclusion, il semble que le format de données qui a été lancé au moment du test était mauvais.
Cependant, je ne comprends pas qu'il soit difficile de reproduire l'erreur car elle s'efface pour une raison quelconque lorsque j'essaie de reproduire l'erreur après son passage. J'étais vraiment en difficulté ...
Lorsque vous obtenez une erreur pour la première fois,
tests.py
self.zip_error_test = File(open('tdd.zip'))
file_data = {'upload_train_file': uploadedFile }
form = DocumentForm(file_data)
form.is_valid()
Je le plie, mais ça ressemble à ça. Cela met django en colère. À propos, j'étais également en colère contre ZIP qui consolidait un fichier.
Je l'ai résolu en le changeant comme ci-dessous.
tests.py
with open("tdd.zip", mode="rb") as f:
uploadedFile = InMemoryUploadedFile(f, "field", "tdd.zip", "application/x-zip-compressed", 100, None, content_type_extra={})
file_data = {'field': uploadedFile }
form = DocumentForm(request, data, file_data)
self.assertFalse(form.is_valid(), f"error:{form.errors}/Le fichier ZIP contenant plusieurs fichiers n'a pas été validé")
Oui. Cela fonctionnera. Tu l'as fait.
J'ai pensé à diverses choses.
Je l'ai écrit dans la validation personnalisée de forms.py
en premier lieu, alors je me suis demandé si c'était la cause,
Je me suis demandé si ce n'était pas bon d'apporter «clean_data», alors j'ai joué avec to_python ().
Je me demandais si je pouvais enregistrer le fichier avec forms.py
.
En pensant à ce qui se passerait si je le téléchargeais à partir d'un formulaire HTML au lieu de le tester soudainement
J'ai réussi. </ b>
Je pensais que c'était différent des données reçues par formulaire, j'ai donc comparé les types de données reçues par les vues et les tests. Puis
forms.py
def clean_field(self):
print(type(self.cleaned_data['field']))
# views > django.core.files.uploadedfile.InMemoryUploadedFile
# tests > django.forms.widgets.ClearableFileInput
Wow, c’est différent.
Pour cette raison, j'ai changé le téléchargement du test par celui mentionné ci-dessus.
C'est un cas. Grâce à cela, je sens que je suis devenu plus familier avec Form. C'est la soi-disant compréhension complète. C'est Kanpeki.
J'ai décidé d'écrire cet article après l'avoir résolu, et pour une raison quelconque, il s'est effacé lorsque j'ai écrit le code qui provoquerait à nouveau une erreur. Sérieusement un mystère. J'ai écrit que ça passe dessus
tests.py
with open("tdd.zip", mode="rb") as f:
file_data = {'field': f}
form = DocumentForm(request, data, file_data)
self.assertFalse(form.is_valid(), f"error:{form.errors}/Le fichier ZIP contenant plusieurs fichiers n'a pas été validé")
Cela passera toujours. Qu'Est-ce que c'est? Tu n'as pas réussi?
Tout passera sans le mode =" rb "
. Pourquoi donc? Avez-vous eu une erreur? C'est vrai. Shinji.
J'utilise le code ci-dessus, pensant que cela pourrait ne plus fonctionner si je le redémarre. Si vous modifiez la classe explicitement, il n'y aura aucun problème.
C'était donc une solution au phénomène selon lequel le zip ne pouvait pas être enregistré pour une raison quelconque.
Peut-être que la semaine prochaine, je résumerai les connaissances que j'ai acquises dans ce domaine. Je m'attendais à l'avoir.
Recommended Posts