我一直在尝试使用Django的上传功能,但我似乎无法让它工作。我的表单已包含enctype="multipart/form-data"
,因此不能成为问题。无论如何,这是我正在使用的:
这是我的模特
class Photo(models.Model):
""" This represents a Photo
"""
caption = models.CharField(_("caption"), max_length=100, null=True,
blank=True, unique=True)
image = ValidateImageField(
upload_to='uploaded_photos/Published/%Y/%B/%d/',
content_types=['image/jpeg', 'image/gif', 'image/png'],
max_upload_size= settings.FILE_UPLOAD_MAX_MEMORY_SIZE
)
source = models.URLField(_("source"), null=True, blank=True)
status = models.CharField(_("status"), max_length=1, choices=STATUS_CHOICES, default='H')
date_added = models.DateTimeField(_("date_added"), auto_now_add=True)
date_modified = models.DateTimeField(_("date_modified"), auto_now=True)
slug = models.SlugField(_("slug"), max_length=50, unique=True)
extra_info = models.TextField(_("extra_info"), null=True, blank=True)
这是我的表格:
class UploadImageForm(forms.ModelForm):
class Meta:
model = Photo
field = ('image', 'caption', 'source', 'extra_info',)
exclude = ('status','slug',)
这是我的观点:
def submit_image(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid:
form.save()
return redirect('photos.views.upload_success')
form = UploadImageForm()
return render(request,'photos/upload.html', {
'form': form
})
我已经尝试过使用djangodocs中显示的chunk方法,但这也没有用。我的代码可能有问题,如果有的话,如果有人可以指出,我将不胜感激。在此先感谢。
答案 0 :(得分:2)
我确定您的表单无效(例如,没有提供必需的slug
)。但是你没有处理这个问题,无论如何都要重定向到成功页面。此外,您在is_valid
之后忘记了括号,因此它始终为True
。正确的观点将是这样的:
def submit_image(request):
form = UploadImageForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect('photos.views.upload_success')
return render(request,'photos/upload.html', {
'form': form
})