Python ImageField未在表单中上载,在管理面板中可以正常上载

Python ImageField未在表单中上载,在管理面板中可以正常上载,python,django,Python,Django,我有一个注册表格,用户可以上传他们个人资料的头像,但我无法让它工作。我已正确设置媒体: MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 我的个人资料模型中有一个ImageField,如下所示: class UserProfile(models.Model): def is_square_png(self): if not self.name.endswith('.png'):

我有一个注册表格,用户可以上传他们个人资料的头像,但我无法让它工作。我已正确设置媒体:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
我的个人资料模型中有一个ImageField,如下所示:

class UserProfile(models.Model):

    def is_square_png(self):
        if not self.name.endswith('.png'):
            raise ValidationError("You may only upload .png files!")
        else:
            w, h = get_image_dimensions(self)
            if not h == w:
                raise ValidationError("This picture is not square! Your picture must be equally wide as its height.")
            else:
                if not (h + w) >= 1000:
                    raise ValidationError("This picture is too small! The minimum dimensions are 500 by 500 pixels.")
                else:
                    if not (h + w) < 2000:
                        raise ValidationError("This picture is too big! The maximum dimensions are 1000 by 1000 pixels.")
        return self

    def generate_user_folder_avatar(instance, filename):
        return "users/%s/%s.png" % (instance.user, 'avatar')

    ...
    avatar = models.ImageField(upload_to=generate_user_folder_avatar,storage=OverwriteStorage(),validators=[is_square_png],blank=True)

    ...
在我看来:

def RegisterView(request):

    registration_success = False

    if request.method == 'POST':
        user_form = UserForm(request.POST, prefix='uf')
        profile_form = UserProfileForm(request.POST, request.FILES, prefix='upf')

        if user_form.is_valid() and profile_form.is_valid():
            user_atr = user_form.save()
            user_atr.set_password(user_atr.password)
            user_atr.save()

            profile = profile_form.save(commit=False)
            profile.user = user_atr

            profile.avatar = request.FILES.get('avatar')

            profile.save()
            registration_success = True

            user_atr = authenticate(username=user_form.cleaned_data['username'],
                        password=user_form.cleaned_data['password'],
                        )
            login(request, user_atr)
            return HttpResponseRedirect("/")

        else:
            print (user_form.errors, profile_form.errors)

    else:
        user_form = UserForm(prefix='uf')
        profile_form = UserProfileForm(prefix='upf')

    return render(request, 'profile/register.html', {'profile_form': profile_form, 'user_form': user_form})
无论我做什么,当我提交表单时,就好像该字段被忽略了一样。django不会将url添加到字段中,也不会实际上载文件


我没有错误,什么都没有!它只是不上传,也不将URL添加到模型实例。

图像将已由
模型表单保存,因此您只需删除该行:

profile.avatar = request.FILES.get('avatar')

图像将保存在
profile.save()
模型表单将保存图像,因此您只需删除该行:

profile.avatar = request.FILES.get('avatar')

图像将保存在
profile.save()

您是否打印了
request.FILES
的内容?您是否在HTML表单中设置了
enctype=“multipart/form data”
?打印
请求文件的内容
?不知道你说的是什么意思。但对于后者,是的。我的意思是检查
request.FILES
是否包含上载的图像或图像是否为空。你能给我举个例子吗?@TimmyO'Mahony有效,发布一个答案,我会接受。你打印了
request.FILES
的内容吗?您是否在HTML表单中设置了
enctype=“multipart/form data”
?打印
请求文件的内容
?不知道你说的是什么意思。但对于后者,是的。我的意思是检查
request.FILES
是否包含上传的图像或图像是否为空。你能给我一个例子吗?@TimmyO'Mahony有效,发布一个答案,我会接受它。