usando RSTRIP em form.cleaned_data [i] em Django

votos
1

Na minha views.py, eu tenho um snippit de código como este:

def clean_post_data(form):
    for i in form.cleaned_data:
        form.cleaned_data[i] = form.cleaned_data[i].rstrip()

def add_product(request):   
    form = ProductForm(request.POST, request.FILES or None)
    image = Image.objects.all()
    action = Add

    if request.POST:
        if form.is_valid():
            clean_post_data(form)
            form.save()
            action = Added new product
            return render_to_response('cms/admin/action.html', {'action' : action},context_instance=RequestContext(request))
        else:
            action = There was an error. Please go back and try again
            return render_to_response('cms/admin/action.html', {'action' : action}, context_instance=RequestContext(request))

    return render_to_response('cms/admin/editproduct.html', {'form' : form, 'action' : action, 'image' : image}, context_instance=RequestContext(request))

Mas quando eu executo isso, eu recebo o seguinte erro 'list' object has no attribute 'rstrip'. O que estou fazendo de errado.

Originalmente, eu tinha o for i in form.cleaned_data:circuito diretamente na vista (e não em outra função) e funcionou muito bem, mas agora quando eu tento isso eu recebo o mesmo erro como acima. http://dpaste.com/92836/

Publicado 22/11/2008 em 05:02
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

A clean_post_datanão deve ser uma função stand-alone.

Deve ser um método no formulário, com o nome clean. Veja Form e validação de campo .

Respondeu 22/11/2008 em 13:46
fonte usuário

votos
0

Muito provavelmente você tem vários elementos em seu formulário com o mesmo nome. Quando é submetido um dos elementos retornados por cleaned_data é uma lista

Se você quiser pular (ou fazer algo sobre especial) Nesses casos, você precisa verificar para isso:


clean_post_data def (forma):
    for i in form.cleaned_data:
        if ( '__ iter__' em dir (form.cleaned_data [i])):
            print "ignorar este elemento:" + str (form.cleaned_data [i])
        outro:
            form.cleaned_data [i] = form.cleaned_data [i] .rstrip ()
Respondeu 22/11/2008 em 06:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more