Найти - Пользователи
Полная версия: объединить две процедуры добавления и редактирования объекта в одну?
Начало » Django » объединить две процедуры добавления и редактирования объекта в одну?
1
qman
всем привет,
модель
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})
подскажите возможно ли объединить две процедуры в одну? Если да то как?
Всем спасибо.
Naota
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 )
Код вероятно не рабочий, возможно нужно подправить в урлконфиге. Думаю идея ясна.
qman
Спасибо, идея ясна. Переписал так:
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)
но, оказалось что сократить код почти не удалось. Может кто то подскажет красивое решение сократить код? или все делают как написано выше?
Naota
Насколько мне помнится, параметр instance=author может быть None и не нужны все эти нагромождения.
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