Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » объединить две процедуры добавления и редактирования объекта в одну? [RSS Feed]

#1 Ноя. 4, 2009 08:04:29

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

объединить две процедуры добавления и редактирования объекта в одну?

всем привет,
модель

class Author(models.Model):
salutation = models.CharField(max_length=10)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
class Admin:
pass
def __unicode__(self):
return '%s %s' % (self.first_name, self.last_name)
есть 2 очень похожие процедуры для добавления и редактирования объекта (автор):
def author_add (request):
if request.method == 'POST':
form = AuthorForm(request.POST)
if form.is_valid():
new_author = form.save()
return HttpResponseRedirect('/data/ok/')
else:
form = AuthorForm()
return render_to_response('author_form.html', {'form': form})


def author_edit (request, author_id):
author = get_object_or_404(Author, pk=author_id)
if request.method == 'POST':
form = AuthorForm(request.POST, instance=author)
if form.is_valid():
form.save()
return HttpResponseRedirect('/data/ok/')
else:
form = AuthorForm(instance=author)
return render_to_response('author_form.html', {'form': form})
подскажите возможно ли объединить две процедуры в одну? Если да то как?
Всем спасибо.



Офлайн

#2 Ноя. 4, 2009 08:49:55

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

объединить две процедуры добавления и редактирования объекта в одну?

def author_add (request, author=None):
if request.method == 'POST':
form = AuthorForm(request.POST, instance=author)
if form.is_valid():
new_author = form.save()
return HttpResponseRedirect('/data/ok/')
else:
form = AuthorForm()
return render_to_response('author_form.html', {'form': form})

def author_edit (request, author_id):
author = get_object_or_404(Author, pk=author_id)
return author_add(request, author )
Код вероятно не рабочий, возможно нужно подправить в урлконфиге. Думаю идея ясна.



Офлайн

#3 Ноя. 4, 2009 15:42:07

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

объединить две процедуры добавления и редактирования объекта в одну?

Спасибо, идея ясна. Переписал так:

def author_add (request, author_id = None):
print "author_add %s"%author_id
if author_id:
author = get_object_or_404(Author, pk=author_id)
if request.method == 'POST':
form = AuthorForm(request.POST, instance=author)
if form.is_valid():
form.save()
return HttpResponseRedirect('/data/ok/')
else:
form = AuthorForm(instance=author)
else:
if request.method == 'POST':
form = AuthorForm(request.POST)
if form.is_valid():
new_author = form.save()
return HttpResponseRedirect('/data/ok/')
else:
form = AuthorForm()
return render_to_response('author_form.html', {'form': form})

def author_edit (request, author_id):
return author_add(request, author_id)
но, оказалось что сократить код почти не удалось. Может кто то подскажет красивое решение сократить код? или все делают как написано выше?



Офлайн

#4 Ноя. 5, 2009 08:19:07

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

объединить две процедуры добавления и редактирования объекта в одну?

Насколько мне помнится, параметр instance=author может быть None и не нужны все эти нагромождения.



Офлайн

  • Начало
  • » Django
  • » объединить две процедуры добавления и редактирования объекта в одну?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version