Ich versuche mehrere Bild-Uploader zu erstellen, die mit Posts/Listings auf meiner Website verbunden ist. Ich konnte alles einstellen, aber wenn ich auf Upload klicke, wird das Formular nicht validiert und Fotos werden nicht gespeichert. Hier ist, was ich bis jetzt habe.Django Dopzone Form validiert nicht
models.py
class UploadFileModel(models.Model):
# listing = models.ForeignKey(Listing, blank=False, default=1)
file = models.ImageField(upload_to=settings.MEDIA_ROOT)
forms.py
class UploadFileForm(forms.ModelForm):
class Meta:
model = UploadFileModel
fields = ["file",]
views.py
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
@require_POST
def upload(request, id):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
print request.FILES
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponse(status=201)
else:
# print form.errors
return HttpResponse(status=400)
return HttpResponse(status=404)
def photo_upload(request, id):
listing = get_object_or_404(Listing, id=id)
context = {"listing": listing,}
return render(request, "dropzone_photo.html", context)
Und am Ende hier ist Teil der Vorlage:
<form class="dropzone" id="my-awesome-dropzone" enctype="multipart/form-data">{% csrf_token %}
<div class="dropzone-previews"></div> <!-- this is were the previews should be shown. -->
<input type="hidden" name="listing" value="{{ listing.id }}" id="listing_id"/>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
Ich verwende Dropzone.options.myAwesomeDropzone mit folgenden Konfiguration:
url: "/dropzone/upload/" + $("#listing_id").val(),
autoProcessQueue: false,
uploadMultiple: true,
Vielen Dank für Ihre Antwort, Sie haben mich auf den richtigen Weg gesetzt. Mit Deiner Hilfe konnte ich machen, wonach ich gesucht habe. Das einzige Problem an Ihrem Code ist, dass 'return HttpResponse (status = 201)' außerhalb der for-Schleife liegen sollte, um mehr als ein Bild hochzuladen. – Azur
Ich glaube, ich benutzte Ajax und gab 201 für jede hochgeladene Datei zurück ... Jedenfalls bin ich froh, dass es geholfen hat. – somecallitblues