Pregunta

Tengo una PerfilUsuario extendida para el registro de nuevos usuarios. Mis user_created Conexiones de función a las señales enviadas al registrarse instancia de usuario básico y crea nuevos PerfilUsuario con campos extendidos de mi forma. Aquí está el código:

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)

El problema es que en esta forma tengo un campo de imagen de avatar. Como se puede ver en el código, estoy recibiendo los datos de la lista de datos del formulario. Pero al parecer ImageField no envía sus datos quedarán con la solicitud POST (como yo estoy haciendo MultiValueDictKeyError at /user/register/ , Key 'image' not found in <QueryDict...) así que no puedo conseguirlo a partir de datos [].

alt text http://img38.imageshack.us/img38/3839/61289917 .png Si las variables son habituales dentro de los 'datos', donde debería buscar archivos? ¿O es el problema más complicado? Lo extraño es que mi forma no tiene cleaned_data atributos ... yo estaba usando el método de dmitko aquí: http :? //dmitko.ru/ p = 546 & lang = es . Mi:
formas: http://paste.pocoo.org/show/230754/
modelos: http://paste.pocoo.org/show/230755/

¿Fue útil?

Solución

Debe estar validando el formulario antes de usarlo, lo que creará el atributo "cleaned_data" que estamos acostumbrados. Sólo echa form.is_valid () y el atributo "cleaned_data" estará disponible , y debe contener el archivo.

atributo "datos" de la forma que va a ser todo lo que pasa como primer argumento initalization (en este caso, request.POST), y los archivos se almacenan por separado en los "archivos" atributo (lo que pasa en que el el segundo argumento, en este caso, request.FILES). Usted no quiere ser el acceso a "datos" del formulario o "archivos" atributos directamente, ya que, si lo hace, usted está leyendo los datos directamente de la solicitud y no obtener ningún beneficio del uso de formas.

Otros consejos

¿Está seguro el atributo <form enctype="..."> está puesto en multipart/form-data? De lo contrario, el navegador no es capaz de cargar los datos del archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top