2017-12-28 20 views
0

Ich versuche, ein Formular zu implementieren, das einfach Daten präsentiert, und bietet dem Benutzer die Wahl von "Akzeptieren" oder "Verweigern". Ich sende die Daten, die ich anzeigen möchte, durch Überschreiben der get_context_data() Methode, und ich habe zwei <input type="submit"> 's auf der Vorlage. HierWas ist eine effizientere Möglichkeit, eine feldfreie Form ohne Dummy-Formulare zu erstellen.Form?

ist die Ansicht:

class FriendResponseView(LoginRequiredMixin, FormView): 
    form_class = FriendResponseForm 
    template_name = 'user_profile/friend_response.html' 
    success_url = '/' 

    def get_context_data(self, **kwargs): 
     context = super(FriendResponseView, self).get_context_data(**kwargs) 
     context['respond_to_user'] = self.kwargs.get('username') 
     responding_profile = Profile.objects.get(
      user__username=self.request.user) 
     requesting_profile = Profile.objects.get(
      user__username=self.kwargs['username']) 

     friend_object = Friend.objects.get(requester=requesting_profile, accepter=responding_profile) 
     context['accepter_asks'] = friend_object.requester_asks 
     return context 

    def form_valid(self, form): 
     super(PairResponseView, self).form_valid(form) 
     if 'accept' in self.request.POST: 
      # do something 
     else: 
      return redirect('/') 

Da das Formular keine Eingabe oder Auswahl nicht akzeptiert, ich habe diese Dummy-Form:

class FriendResponseForm(forms.Form): 
    pass 

Es muss eine effizientere, Django Weg das gleiche Ergebnis erzielen. Wie würde ich darüber gehen?

Antwort

1

Der beste Weg ist, kein FormView zu verwenden, sondern eine grundlegende TemplateView. Definieren Sie dann post, um die Übermittlungslogik auszuführen.

class FriendResponseView(LoginRequiredMixin, TemplateView): 
    template_name = 'user_profile/friend_response.html' 

    def get_context_data(self, **kwargs): 
     ... 

    def post(self, request): 
     if 'accept' in self.request.POST: 
      # do something 
     else: 
      return redirect('/') 
Verwandte Themen