использование rstrip для form.cleaned_data [i] в ​​Django - PullRequest
1 голос
/ 22 ноября 2008

В моем views.py у меня есть фрагмент кода, подобный этому:

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))

Но когда я запускаю это, я получаю следующую ошибку 'list' object has no attribute 'rstrip'. Что я делаю не так.

Изначально у меня был цикл for i in form.cleaned_data: непосредственно в виде (не в другой функции), и он работал нормально, но теперь, когда я пытаюсь это сделать, я получаю ту же ошибку, что и выше. http://dpaste.com/92836/

Ответы [ 2 ]

1 голос
/ 22 ноября 2008

clean_post_data не должно быть отдельной функцией.

Это должен быть метод в форме с именем clean. См. Проверка формы и поля .

0 голосов
/ 22 ноября 2008

Скорее всего, в вашей форме есть несколько элементов с одинаковыми именами. Когда он передается, один из элементов, возвращаемых cleaned_data, представляет собой список

Если вы хотите пропустить (или сделать что-то особенное) такие случаи, вам нужно проверить это:


def clean_post_data(form):
    for i in form.cleaned_data:
        if('__iter__' in dir(form.cleaned_data[i])):
            print "skip this element: " + str(form.cleaned_data[i])
        else:
            form.cleaned_data[i] = form.cleaned_data[i].rstrip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...