2017-04-05 53 views
0

我试图在注册用户后创建用户配置文件。在此配置文件中,我需要上传图片。但是在验证图像时我一直在收到KeyError。用Django CBV上传图像CreateView

经过几个小时的谷歌搜索和尝试不同的解决方案,我现在卡住了。有人可以告诉我我做错了什么吗?提前致谢。

models.py

class Profile(models.Model): 
    user = models.OneToOneField(User, 
           on_delete=models.CASCADE) 
    slug = models.SlugField(default='', 
          editable=False) 
    picture = models.ImageField('Profile picture', 
           upload_to='profile_pics/%Y-%m-%d/', 
           null=True, 
           blank=True) 
    bio = models.CharField("Short Bio", max_length=200, blank=True, null=True) 
    email_verified = models.BooleanField("Email verified", default=False) 

views.py

from .models import Profile 
from .forms import ProfileForm 

class CreateProfile(FormView): 
    model = Profile 
    template_name = 'profiles/profile_form.html' 
    form_class = ProfileForm 
    fields = ['picture', 'bio'] 

    def get_success_url(self): 
     return reverse('profiles:detail', kwargs={'slug': self.slug}) 


    def form_valid(self, form): 
     profile = form.save(commit=False) 
     image = form.cleaned_data['image'] 
     obj.user = self.request.user 
     profile.save() 

     return HttpResponseRedirect(self.get_success_url()) 

forms.py

from .models import Profile 


class ProfileForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = ['picture', 'bio',] 

回溯:

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner 
    42.    response = get_response(request) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch 
    88.   return handler(request, *args, **kwargs) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/lib/python3.5/site-packages/django/views/generic/edit.py" in post 
    183.    return self.form_valid(form) 

File "/home/xxxxxxxxxx/xxxxxxxx/xxxxxxx/template/profiles/views.py" in form_valid 
    28.   image = form.cleaned_data['image'] 

Exception Type: KeyError at /profiles/create/ 
Exception Value: 'image' 
+2

更换

image = form.cleaned_data['image'] 

。所以必须是'form.cleaned_data ['picture']',对吧? – Enix

回答

0

的错误是在这里:

def form_valid(self, form): 
    profile = form.save(commit=False) 
    image = form.cleaned_data['image'] 
    obj.user = self.request.user 
    profile.save() 

您尝试从form.cleaned_data获得“形象”,而你的头像场被称为picture

所以,随着您已经定义图像字段名`picture`,而不是'在你的模型image`

image = form.cleaned_data['picture'] 
+0

谢谢。这工作。有一个upvote。 – user2901792