Python 使用Django CBV CreateView上载图像

Python 使用Django CBV CreateView上载图像,python,django,django-class-based-views,Python,Django,Django Class Based Views,我正在尝试在注册用户后创建用户配置文件。在这个配置文件中,我需要上传一个图像。但在验证图像时,我总是遇到一个关键错误 经过几个小时的谷歌搜索和尝试不同的解决方案,我现在陷入困境。有人能告诉我我做错了什么吗?提前谢谢 models.py class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) slu

我正在尝试在注册用户后创建用户配置文件。在这个配置文件中,我需要上传一个图像。但在验证图像时,我总是遇到一个关键错误

经过几个小时的谷歌搜索和尝试不同的解决方案,我现在陷入困境。有人能告诉我我做错了什么吗?提前谢谢

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'
错误在这里:

def form_valid(self, form):
    profile = form.save(commit=False)
    image = form.cleaned_data['image']
    obj.user = self.request.user
    profile.save()
您尝试从
表单中获取“图像”。当您的化身字段被称为
图片时,数据被清理

那么,替换

image = form.cleaned_data['image']


您已在模型中使用名称
picture
而不是
image
定义了图像字段。所以必须是
表单。清除数据['picture']
,对吗?
image = form.cleaned_data['picture']