Найти - Пользователи
Полная версия: Значения в форме для редактирования
Начало » Django » Значения в форме для редактирования
1 2
lomach
Добрый день!

Изучаю django. Столкнулся со следующим вопросом.
Мне необходимо сделать страницу редактирования данных (и их сохранения после редактирования).
Делаю форму из модели по документации.
https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/

Есть такой пример:
# Create a form to edit an existing Article.
>>> a = Article.objects.get(pk=1)
>>> f = ArticleForm(instance=a)
>>> f.save()
Возникли следующие вопросы:
Зачем здесь сохранение формы, если я вывожу форму только для редактирования?
В документации написано:
Every form produced by ModelForm also has a save() method. This method creates and saves a database object from the data bound to the form. A subclass of ModelForm can accept an existing model instance as the keyword argument instance; if this is supplied, save() will update that instance.
FishHook
lomach
# Create a form to edit an existing Article.
>>> a = Article.objects.get(pk=1)
>>> f = ArticleForm(instance=a)
>>> f.save()
Не понимаю, а что тут собственно должно произойти? Какова логика таких действий?
Получили объект, инстанциировали им форму и эту форму тут же сохранили!
Это то же самое, что сделать
>>> a = Article.objects.get(pk=1)
>>> a.save()
То есть бессмыслица.
buddha
Отредактированные данные же должны сохраньтся, если форму не сохранить , в БД изменения не запишутся.
FishHook
buddha
Отредактированные данные же должны сохраньтся, если форму не сохранить , в БД изменения не запишутся.
Из вашего кода совершенно не ясно, как они собственно редактируются, именно этот момент Вы решили опустить, почему то
buddha
^.^ мда
FishHook
buddha
^.^ мда
Да, да! Я пиво пью и раков ем, не смотрел я кто чего запостил, извини.
buddha
=)) всё ок
lomach
Не успел с работы домой добраться, а тут уже люди пиво пьют и раков едят. :)
Приятного аппетита! :)

Как тогда тупо сделать, чтобы форма получилась заполненной данными объекта с нужным мне ID?
Я вот этого понять не могу. Мне нужно сначала просто вывести заполненную для редактирования форму.
buddha
Не сильно быстрый путь, зато хорошо поймешь всё:
сначала эти две странички
https://docs.djangoproject.com/en/1.4/topics/forms/
https://docs.djangoproject.com/en/1.4/ref/forms/api/
и половинка этой(до параграфа Models formsets)
https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/
там есть ответы на твои вопросы.

Попробуй сначала, если что пиши сюда код.
lomach
Спасибо.
Документацию и раньше читал. Кое-что упустил правда.
В итоге осилил. Все работает.
Код получился такой:
@login_required(login_url='/login/')
def edit_element(request, id):
     if 'id' in request.GET and request.GET['id']:
         q = request.GET['id']
     f = Main_menu.objects.get(pk=q)
     else:
          f = None
          return HttpResponse('Error: No id!')
 
      if request.method == 'POST': 
          form = MenuForm(request.POST, instance=f)
          if form.is_valid(): 
              form.save()
              return HttpResponseRedirect('/menu/')
      else:
          form = MenuForm(instance=f)
          title = "Редактирование"
          return render_to_response("menu_edit.html", {'title': title, 'form': form,},
         context_instance=RequestContext(request))
Есть что-то, что можно соптимизировать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB