Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2012 14:09:06

lomach
От:
Зарегистрирован: 2012-01-28
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

Добрый день!

Изучаю 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.




Django 1.8, БД MySQL 6
Debian Linux 7.0

Офлайн

#2 Окт. 26, 2012 14:57:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

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()
То есть бессмыслица.



Офлайн

#3 Окт. 26, 2012 15:41:50

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

Отредактированные данные же должны сохраньтся, если форму не сохранить , в БД изменения не запишутся.

Офлайн

#4 Окт. 26, 2012 15:45:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

buddha
Отредактированные данные же должны сохраньтся, если форму не сохранить , в БД изменения не запишутся.
Из вашего кода совершенно не ясно, как они собственно редактируются, именно этот момент Вы решили опустить, почему то



Офлайн

#5 Окт. 26, 2012 15:49:22

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

^.^ мда

Офлайн

#6 Окт. 26, 2012 16:06:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

buddha
^.^ мда
Да, да! Я пиво пью и раков ем, не смотрел я кто чего запостил, извини.



Офлайн

#7 Окт. 26, 2012 17:23:20

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

=)) всё ок

Офлайн

#8 Окт. 26, 2012 21:26:17

lomach
От:
Зарегистрирован: 2012-01-28
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

Не успел с работы домой добраться, а тут уже люди пиво пьют и раков едят. :)
Приятного аппетита! :)

Как тогда тупо сделать, чтобы форма получилась заполненной данными объекта с нужным мне ID?
Я вот этого понять не могу. Мне нужно сначала просто вывести заполненную для редактирования форму.




Django 1.8, БД MySQL 6
Debian Linux 7.0

Офлайн

#9 Окт. 26, 2012 22:45:03

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

Не сильно быстрый путь, зато хорошо поймешь всё:
сначала эти две странички
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/
там есть ответы на твои вопросы.

Попробуй сначала, если что пиши сюда код.

Офлайн

#10 Окт. 28, 2012 20:05:47

lomach
От:
Зарегистрирован: 2012-01-28
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Значения в форме для редактирования

Спасибо.
Документацию и раньше читал. Кое-что упустил правда.
В итоге осилил. Все работает.
Код получился такой:

@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))
Есть что-то, что можно соптимизировать?




Django 1.8, БД MySQL 6
Debian Linux 7.0

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version