2013-12-11 8 views
2

Мне интересно, как создать кнопку «Предварительный просмотр» для страницы UpdateView django.django updateview preview button

Я первый добавить вторую кнопку в моей форме в моем шаблоне:

<button type="preview" class="btn btn-default" value="preview" name="preview">{% trans 'Preview' %}</button> 

Тогда я перезаписать метод form_valid в моем коде:

def form_valid(self, form): 
    if 'preview' in self.request.POST: 
     #??? Don't know what to do here 
    return super(SongEditView, self).form_valid(form) 

Но я не знаю, какой метод вызов для обновления UpdateView при использовании текущего значения формы вместо значения базы данных. Вероятно, это как-то связано с контекстом ... но я не нашел способ вызова для обновления (рендеринга?) Моей страницы.

PS: Предварительный просмотр из «stackoverflow» является довольно устрашающим, как это сделать, используя ajax?

ответ

1

Я нашел решение (вероятно, не лучший):

У меня есть 2 кнопки в шаблоне (то же самое имя, но другое значение):

<button type="submit" class="btn btn-default" value="submit" name="submit">{% trans 'Submit' %}</button> 
<button type="preview" class="btn btn-default" value="preview" name="submit">{% trans 'Preview' %}</button> 

В form_valid(), я поставил предварительный просмотр в сеансе, если пользователь нажал кнопку предварительного просмотра, а затем снова вызовет мою страницу.

def form_valid(self, form): 
    if self.request.POST['submit'] == 'preview': 
     self.request.session['previewsong'] = self.request.POST['body'] 
     return HttpResponseRedirect(reverse('editsong', args={self.object.id, self.object.nice_url})) 
    return super(SongEditView, self).form_valid(form) 

Наконец, я также перезаписать метод get_context_data для чтения информации о сеансе и заполнить форму и предварительный просмотр со значением от сессии.

def get_context_data(self, **kwargs): 
    context = super(SongEditView, self).get_context_data(**kwargs) 
    if('previewsong' in self.request.session): 
     context['preview'] = self.request.session['previewsong'] 
     context['form'].initial['body'] = self.request.session['previewsong'] 
     del self.request.session['previewsong'] 
    return context 

Есть ли лучший способ сделать это? Я не могу сделать это с помощью javascript, потому что у меня есть фильтр django для отображения рендера.

Смежные вопросы