上传ImageField form.is_valid无效

时间:2013-01-28 23:33:52

标签: python django

通过ImageField上传图像时,表单无效。我知道我需要正确绑定到文件,但我看不出我错过了什么/出错了。真的很欣赏Django的一些智慧。

Models.py

class New_User(models.Model):
        user = models.OneToOneField(User, unique = True)
        birthday = models.DateField(null=True)
        name = models.CharField(max_length=100)
        image = models.ManyToManyField(Image)
        album = models.ManyToManyField(Album)
        avatar = models.ImageField("Profile Pic", upload_to='images/', blank =True, null=True)

        def __unicode__(self):
            return unicode (self.user)

    **forms.py**

    class Upload(ModelForm):
        class Meta: 
            model = New_User

    **Views.py**

    @login_required
    def Profile(request):
            #if not logged in, we send them to the log in page
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/login')
        user_reg = request.user.get_profile()
        '''Saving the profile pic'''
        if request.method =="POST":
            picture_form = Upload(request.POST, request.FILES, instance = user_reg)
            if picture_form.is_valid():
                avatar = form.cleaned_data['avatar']
                a = New_User(avatar = avatar)
                a.save()
                #resize and save image under same filename
                #save_file(request.FILES['avatar'])
                return HttpResponse('Thanks for uploading the image')#just to test if the image is valid
            else:
                return HttpResponse('Fail')#just to test if the image is not valid
        else:
            picture_form = Upload(instance = user_reg)

        if user_reg.avatar:
            image = "/media/" + user_reg.avatar.name
        context = {"user_reg" : user_reg, "picture_form" : picture_form, "image":image, "media_url": MEDIA_URL}
        return render_to_response("profile.html", context, context_instance= RequestContext(request))

    def save_file(file, path =''):
        '''Save file function'''
        filename = file._get_name()
        fd = open("%s/ %s" % (MEDIA_ROOT, str(path) + 'images/' + str(filename)), 'wb')
        for chunk in file.chunks():
            fd.write(chunk)
        fd.close()

    **Profile.html**

    <div class='row'>
        <div class="span">
            <form enctype="multipart/form-data" action="/profile" method="POST">
            {% csrf_token %}
            <div style='float:left;'>

         <p>{{ picture_form.avatar }}</p>
            <input type="submit" value="Submit" id="submit" />
            </form>

0 个答案:

没有答案