2016-06-03 11 views
0

Ich verwende die generische Detailansicht, um die Details meines Modelltickets anzuzeigen. Es gibt ein Boostrap-Modal, um Kommentare zu diesem Ticket in der Vorlage zu erstellen.Zwei Klassen basierend auf derselben Route

Wie kann ich CreateView verwenden, um das Formular im Modal anzuzeigen?

Ist es möglich, eine Art Vererbung zu verwenden, um DetailView mit CreateView zu kombinieren, um das Bootrap-Modal zu verwenden?

view.py

class TicketDetail(DetailView): 
    model = Ticket 
    template_name = 'ticket_detail.html' 
    context_object_name = 'ticket' 
    slug_field = 'slug' 

class TicketCommentCreate(CreateView): 
    template_name = 'ticket_detail.html' 
    form_class = CommentForm 
    success_url = '/painel/tickets' 

urls.py

url(r'^painel/tickets/(?P<slug>[-\w]+)/$',views.TicketDetail.as_view(), name='ticket_detail'), 

ticket_detail.html

<div class="modal fade" id="commentModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
     <div class="modal-dialog" role="document"> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
        <h4 class="modal-title" id="myModalLabel">Criar Comentário</h4> 
       </div> 
       <div class="modal-body"> 
        {% load crispy_forms_tags %} 
        {% crispy form %} 
       </div> 
      </div> 
     </div> 
    </div> 

Antwort

0

fand ich einen Weg, hier zu lösen: Using FormMixin with DetailView

class TicketDisplay(LoginRequiredMixin, DetailView): 
    model = Ticket 
    template_name = 'ticket_detail.html' 
    context_object_name = 'ticket' 
    slug_field = 'slug' 

    def get_context_data(self, **kwargs): 
     context = super(TicketDisplay, self).get_context_data(**kwargs) 
     context['form_add_comment'] = CommentForm() 
     return context 

class TicketCommentCreate(LoginRequiredMixin, FormView): 
    form_class = CommentForm 
    template_name = 'ticket_detail.html' 

    def get_success_url(self): 
     return reverse('ticket_detail', kwargs={'slug' : self.kwargs['slug']}) 

    def form_valid(self, form): 
     slug = self.kwargs.get('slug', None) 
     ticket = get_object_or_404(Ticket, slug=slug) 
     comment = form.save(commit=False) 
     comment.author_login = ticket.author 
     comment.ticket = ticket 
     comment.save() 
     ticket.save() #Update Date 
     return HttpResponseRedirect(self.get_success_url()) 


class TicketDetail(LoginRequiredMixin, View): 

    def get(self, request, *args, **kwargs): 
     view = TicketDisplay.as_view() 
     return view(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     view = TicketCommentCreate.as_view() 
     return view(request, *args, **kwargs) 
Verwandte Themen