Форум сайта python.su
Здравствуйте.
Есть моделька с уникальным полем link:
class BookMark(models.Model): category = models.ForeignKey(BookMarkCategory, verbose_name=('Category')) description = models.TextField(_('Description'), blank=True) link = models.CharField(_('Link'), unique=True, max_length=150) # вот это поле priority = models.IntegerField(_('Priority')) looked_through = models.BooleanField(_('Looked trough')) publick = models.BooleanField(_('Public'))
def edit_bookmark(request, id): bookmark_obj = BookMark.objects.get(pk=id) if request.POST: form = BookMarkForm(request.POST, instance=bookmark_obj) # вот вставил экземпляр if form.is_valid(): # а обновлять не желает form.save() return redirect('show_bookmarks_list') else: form = BookMarkForm() form.initial = bookmark_obj.get_fields_dict() return render(request, 'mybookmark/create_bookmark.html', dict(form=form))
Отредактировано buddha (Дек. 15, 2012 21:25:43)
Офлайн
Используй метод формы clean.
Офлайн
def edit_bookmark(request, id): bookmark_obj = BookMark.objects.get(pk=id) if request.POST: form = BookMarkForm(request.POST, instance=bookmark_obj) # вот вставил экземпляр if form.is_valid(): # а обновлять не желает form.save() return redirect('show_bookmarks_list') else: form = BookMarkForm(instance=bookmark_obj) return render(request, 'mybookmark/create_bookmark.html', dict(form=form))
Офлайн
Извините ребята. Написанный мной код работает правильно, проблема была в другом…
А метод clean и добавление экземпляра модели в BookMarkForm(instance=bookmark_obj) это вы конечно вообще мимо…
Офлайн
Напишите в чем была проблема.
Офлайн
Всё оказалось просто:
-В функции представления рендерил(render() ) не тот шаблон.
-В самом шаблоне ставил не тот URL в аргумент формы action.
Из-за этого и вопрос вам задал некорректный, простите)
Когда поправил, всё заработало как нужно.
Отредактировано buddha (Дек. 20, 2012 10:03:18)
Офлайн
ок, еще вопрос - почему используешь
form = BookMarkForm() form.initial = bookmark_obj.get_fields_dict()
form = BookMarkForm(instance=bookmark_obj)
Офлайн
Так это ж разные вещи.
Атрибут instance служит для обновления модели после вызова form.save().
Атрибут initial для заполнения предварительных данных именно для отображения на страничке. Т.е. я этим показываю , какие значения уже имеются(чисто для справки).
Офлайн
buddha
Так это ж разные вещи.Атрибут instance служит для обновления модели после вызова form.save().Атрибут initial для заполнения предварительных данных именно для отображения на страничке. Т.е. я этим показываю , какие значения уже имеются(чисто для справки).
Офлайн
Спасибо, переписал…
Офлайн