1

새로운 사용자를 등록하기위한 확장 된 사용자 프로필이 있습니다. 내 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는 POST 요청 (내가 MultiValueDictKeyError at /user/register/,)을 가져 오는 데이터를 보내지 않으므로 데이터 []에서 가져올 수 없습니다.

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/

답변

3

당신은 그것을 사용하기 전에 양식을 검증해야한다은 "cleaned_data"를 만들 것입니다 당신이 사용하고 속성. form.is_valid()를 확인하면 "cleaned_data"속성을 사용할 수 있으며 파일을 포함해야합니다.

양식의 "data"속성은 첫 번째 초기화 인수 (이 경우 request.POST)로 전달한 것이므로 파일은 "파일"속성에 별도로 저장됩니다 (사용자가 두 번째 인수,이 경우 request.FILES). 양식의 "데이터"또는 "파일"속성에 직접 액세스하고 싶지는 않습니다. 요청에서 바로 데이터를 읽고 양식 사용으로 인한 이점을 얻지 못하기 때문입니다.

+0

네 말이 맞아. 탈리는 그것을 검증하는 것을 잊어 버린다. 잠시 후에 그걸 확인해 줄거야. – crivateos

+0

불행히도 양식의 유효성을 확인할 때 전달되지 않습니다. 필드가 적절한 데이터를 전달하는 것처럼 보이는 이유는 확실하지 않습니다. – crivateos

0

<form enctype="..."> 속성이 multipart/form-data으로 설정되어 있습니까? 그렇지 않으면 브라우저가 파일 데이터를 업로드 할 수 없습니다.

+0

예, 확실합니다 :

crivateos