2013-06-06 3 views
0

У меня проблема, и я не знаю, откуда она взялась.Форма не найдена метод сохранения

Я эту форму:

class LinkWidgetToDashboardForm(forms.Form): 
    widget = forms.MultipleChoiceField(
       choices = [(w.pk, w.name) for w in Widget.objects.all()] 
      ) 

Ничего особенного, но я не могу сохранить, навигатор возвращает мне

'LinkWidgetToDashboardForm' object has no attribute 'save' 

и в самом деле, если я применяю dir() над моей форме, например, нет способа сохранения.

Просто для информации

def linkWidgetToDashboard(request): 
    if request.method == 'POST': 
     form = LinkWidgetToDashboardForm(request.POST) 
     if form.is_valid(): 
      o = form.save(commit=False) 
      o.dashboard = Dashboard.object.get(pk=1) 
      o.widget = form.cleaned_data['widget'] 
      o.save() 
    return HttpResponse('') 

Любая идея?

+0

Класс формы просто представляет поля, если вы хотите сохранить, вы должны создать функцию сохранения или использовать ModelForm с функцией сохранения. – Charl

+0

Должен был ответить без комментариев хаха – Charl

ответ

1

Непонятно, что вы пытаетесь «сохранить», поскольку поле в вашей форме уже заполнено записями из базы данных.

Похоже, что вы хотите сделать, это обновить выбранный объект с приборной панелью, в этом случае, используйте:

if form.is_valid(): 
    widget = Widget.objects.get(pk=form.cleaned_data['widget']) 
    widget.dashboard = Dashboard.objects.get(pk=1) 
    widget.save() 

Однако этот тип функциональности встроенный с ModelForms, которые формы, которые напрямую связаны с моделями и имеют логику сохранения базы данных.

0

Здесь нет необходимости в этом языке, пожалуйста.

Только модели ModelForms имеют методы сохранения. Нормальная форма не имеет одного, поскольку это не имеет никакого смысла - что бы это сэкономило?

1

Доступно для ModelForm не Form. Ваша форма основана на forms.Form.

При его сохранении ModelForm вернет вам экземпляр модели, которую он определил. Нормальная форма не знает, какой объект создать, чтобы они не могли этого сделать.

Refer ModelForms.

Смежные вопросы