Django上传图片

时间:2011-12-16 00:24:30

标签: django django-models django-forms django-views django-uploads

我一直在尝试使用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方法,但这也没有用。我的代码可能有问题,如果有的话,如果有人可以指出,我将不胜感激。在此先感谢。

1 个答案:

答案 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
    })