Ich habe diesen Fehler erhalten, als ich versucht habe, eine Zip-Datei mit mehreren Dateien im FileField des Formulars hochzuladen und zu speichern. Aus der Schlussfolgerung geht hervor, dass das Datenformat, das zum Zeitpunkt des Tests ausgegeben wurde, schlecht war.
Ich verstehe jedoch nicht, dass es schwierig ist, den Fehler zu reproduzieren, da er aus irgendeinem Grund behoben wird, wenn ich versuche, den Fehler nach dem Durchlaufen zu reproduzieren. Ich war wirklich in Schwierigkeiten ...
Wenn Sie zum ersten Mal eine Fehlermeldung erhalten,
tests.py
self.zip_error_test = File(open('tdd.zip'))
file_data = {'upload_train_file': uploadedFile }
form = DocumentForm(file_data)
form.is_valid()
Ich falte es, aber es sieht so aus. Das macht Django wütend. Übrigens war ich ähnlich wütend auf ZIP, das eine Datei konsolidierte.
Ich habe es gelöst, indem ich es wie folgt geändert habe.
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}/ZIP mit mehreren Dateien wurde nicht validiert")
Ja. Das wird funktionieren. Du hast es geschafft.
Ich habe über verschiedene Dinge nachgedacht.
Ich habe es in erster Linie in der benutzerdefinierten Validierung von forms.py
geschrieben, also habe ich mich gefragt, ob das die Ursache ist.
Ich habe mich gefragt, ob es nicht gut ist, "bereinigte_Daten" zu bringen, also habe ich mit to_python () gespielt.
Ich habe mich gefragt, ob ich die Datei mit forms.py
speichern könnte.
Als Ergebnis der Überlegung, was passieren würde, wenn ich es tatsächlich aus einem HTML-Formular hochladen würde, anstatt es plötzlich zu testen
Ich habe bestanden. </ b>
Ich dachte, dass dies anders ist als die Daten, die vom Formular empfangen wurden, und verglich daher die Arten von Daten, die von Ansichten und Tests empfangen wurden. Dann
forms.py
def clean_field(self):
print(type(self.cleaned_data['field']))
# views > django.core.files.uploadedfile.InMemoryUploadedFile
# tests > django.forms.widgets.ClearableFileInput
Wow, das ist anders.
Aus diesem Grund habe ich den Upload für den Test auf den oben genannten geändert.
Dies ist ein Fall. Dank dessen habe ich das Gefühl, mit Form besser vertraut zu sein. Es ist das sogenannte vollständige Verständnis. Es ist Kanpeki.
Ich habe beschlossen, diesen Artikel nach dem Lösen zu schreiben, und aus irgendeinem Grund wurde er gelöscht, als ich den Code schrieb, der erneut einen Fehler verursachen würde. Ernsthaft ein Rätsel. Ich schrieb, dass es oben geht
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}/ZIP mit mehreren Dateien wurde nicht validiert")
Dies wird immer noch vergehen. Was ist es? Hast du nicht bestanden?
Alles wird ohne den mode =" rb "
passieren. Warum das? Hast du einen Fehler bekommen? Das ist wahr. Shinji.
Ich verwende den obigen Code und denke, dass er möglicherweise nicht mehr funktioniert, wenn ich ihn neu starte. Wenn Sie die Klasse explizit ändern, gibt es kein Problem.
Es war also eine Lösung für das Phänomen, dass der Reißverschluss aus irgendeinem Grund nicht gespeichert werden konnte.
Vielleicht werde ich nächste Woche oder so das Formwissen zusammenfassen, das ich in dieser Angelegenheit gewonnen habe. Ich hatte erwartet.
Recommended Posts