Django Dopzone 表单未验证
Django Dopzone form is not validating
我正在尝试构建连接到我网站上 posts/listings 的多个图片上传器。我能够设置所有内容,但是当我点击上传时,表单未验证并且照片未保存。
这是我目前的情况。
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)
最后是模板的一部分:
<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>
我正在使用具有以下配置的 Dropzone.options.myAwesomeDropzone:
url: "/dropzone/upload/" + $("#listing_id").val(),
autoProcessQueue: false,
uploadMultiple: true,
您在这里真的不需要 Django 表单。在你的观点中使用这个:
@require_POST
def upload(request, id):
if request.method == "POST" and request.is_ajax():
for filename, uploaded_file in request.FILES.iteritems():
image = UploadFileModel()
image.file = uploaded_file
image.save()
return HttpResponse(status=201)
return HttpResponse(status=404)
这行不通:
file = models.ImageField(upload_to=settings.MEDIA_ROOT)
您需要提供上传目录的名称,MEDIA_ROOT 将由 Django 添加到该名称的前面。示例:
file = models.ImageField(upload_to="uploads")
如果您的 MEDIA_ROOT 是 "media",路径将是“/media/uploads/...”。
所以最后这就是我要找的:
model.py
class UploadFileModel(models.Model):
listing = models.ForeignKey(Listing, blank=False)
file = models.ImageField(upload_to="uploads")
view.py
@require_POST
def upload(request, id):
if request.method == "POST" and request.is_ajax():
for filename, uploaded_file in request.FILES.iteritems():
print uploaded_file
image = UploadFileModel()
image.file = uploaded_file
listing_instance = Listing.objects.get(id=id)
image.listing = listing_instance
image.save()
return HttpResponse(status=201)
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)
模板和我的问题一样。
我正在尝试构建连接到我网站上 posts/listings 的多个图片上传器。我能够设置所有内容,但是当我点击上传时,表单未验证并且照片未保存。 这是我目前的情况。
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)
最后是模板的一部分:
<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>
我正在使用具有以下配置的 Dropzone.options.myAwesomeDropzone:
url: "/dropzone/upload/" + $("#listing_id").val(),
autoProcessQueue: false,
uploadMultiple: true,
您在这里真的不需要 Django 表单。在你的观点中使用这个:
@require_POST
def upload(request, id):
if request.method == "POST" and request.is_ajax():
for filename, uploaded_file in request.FILES.iteritems():
image = UploadFileModel()
image.file = uploaded_file
image.save()
return HttpResponse(status=201)
return HttpResponse(status=404)
这行不通:
file = models.ImageField(upload_to=settings.MEDIA_ROOT)
您需要提供上传目录的名称,MEDIA_ROOT 将由 Django 添加到该名称的前面。示例:
file = models.ImageField(upload_to="uploads")
如果您的 MEDIA_ROOT 是 "media",路径将是“/media/uploads/...”。
所以最后这就是我要找的: model.py
class UploadFileModel(models.Model):
listing = models.ForeignKey(Listing, blank=False)
file = models.ImageField(upload_to="uploads")
view.py
@require_POST
def upload(request, id):
if request.method == "POST" and request.is_ajax():
for filename, uploaded_file in request.FILES.iteritems():
print uploaded_file
image = UploadFileModel()
image.file = uploaded_file
listing_instance = Listing.objects.get(id=id)
image.listing = listing_instance
image.save()
return HttpResponse(status=201)
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)
模板和我的问题一样。