/ / UnboundLocalError, variable local accedida antes de la asignación, pero no? - Python, Django

UnboundLocalError, variable local accedida antes de la asignación, pero no? - Python, Django

Estoy haciendo algo bastante simple en Django y obtengo este error realmente extraño:

UnboundLocalError at /me/profile/edit/
local variable "form" referenced before assignment

Aquí está mi código:

if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
print "Yes"
else:
form = MyForm(user=request.user)

¿Por qué este código está lanzando ese error? Es bastante sencillo, pero si saco el if form.is_valid() cosas, funciona. ¿Qué va mal?

Respuestas

2 para la respuesta № 1

Tal como se publicó, el código parece correcto, por lo que espero que se haya perdido algo al publicar la pregunta (tal vez la segunda declaración de tipo "if" no esté realmente sangrada).


3 para la respuesta № 2

La solución más sencilla a este problema es eliminar la cláusula else:

form = MyForm(request.POST or None)

if request.method == "POST":
if form.is_valid():
print "Yes"

La presentación de Uso avanzado de formularios Django de Danny Greenfeld es un gran ejemplo de esto: http://www.slideshare.net/pydanny/advanced-django-forms-usage (la diapositiva 33 es a lo que me refiero específicamente).