注册时存储用户的头像
-
01-10-2019 - |
题
我有一个用于注册新用户的扩展用户封装。我的user_created函数连接到注册基本用户实例时发送的信号,并通过我的表单中的扩展字段创建新的UserProfile。这是代码:
from registration.signals import user_registered
from accounts.forms import ExtendedRegistrationForm
import accounts
from accounts.models import UserProfile
def user_created(sender, user, request, **kwargs):
form = ExtendedRegistrationForm(request.POST, request.FILES)
data = UserProfile(user=user)
data.is_active = False
data.first_name = form.data['first_name']
data.last_name = form.data['last_name']
data.pid = form.data['pid']
data.image = form.data['image']
data.street = form.data['street']
data.number = form.data['number']
data.code = form.data['code']
data.city = form.data['city']
data.save()
user_registered.connect(user_created)
问题是,在此形式上,我有一个化身的图像字段。从代码中可以看到,我正在从表单的数据列表中获取数据。但是显然ImageField并未带有发布请求的数据(当我得到 MultiValueDictKeyError at /user/register/
, Key 'image' not found in <QueryDict...
)所以我无法从数据[]获得它。
Alt Text http://img38.imageshack.us/img38/3839/61289917.png如果通常的变量在“数据”内部,我应该在哪里寻找文件?还是问题更复杂?奇怪的是,我的表格没有属性cleaned_data ...我在这里使用dmitko的方法: http://dmitko.ru/?p=546&lang=en 。我的 :
形式 : http://paste.pocoo.org/show/230754/
楷模 : http://paste.pocoo.org/show/230755/
解决方案
您应该在使用该表格之前验证表单,该表格将创建您习惯的“ cleaned_data”属性。 只需检查form.is_valid()和“ cleaned_data”属性,并且应包含文件。
表单的“数据”属性将是您作为第一个intalization参数传递的任何内容(在这种情况下,请request.post),并且文件分别存储在“文件”属性中(无论您将其作为第二个参数传递,在这种情况下,请求.files)。您不想直接访问表单的“数据”或“文件”属性,因为,如果这样做,您只是直接从请求中读取数据,而不会从使用表单中获得任何好处。
其他提示
你确定 <form enctype="...">
属性设置为 multipart/form-data
?否则,浏览器将无法上传文件数据。