2017-10-17 3 views
1

J'ai un projet django qui a un formulaire avec deux boutons dans un de mes modèles. Ces boutons acceptent ou refusent une «offre», qui est l'un de mes modèles. Je passe une demande POST du modèle à la vue où j'ai deux fonctions. Comment faire pour que ces boutons d'approbation et de refus mettent à jour la valeur "approved_by_x" dans mon modèle?Mettre à jour la valeur de l'objet à partir de la vue basée sur la fonction

Le modèle:

<form method="post" class="login-container" action="{% url 'accept_booking' %}"> 
         {% csrf_token %} 
         <input class="btn btn-primary" type="submit" value="Accept" name="Accept"/> 
         <input type="hidden" name="offer" value="{{ offer }}" /> 
        </form> 

        <form method="post" class="login-container" action="{% url 'decline_booking' %}"> 
         {% csrf_token %} 
         <input class="btn btn-primary" type="submit" value="Decline" name="Decline" /> 
         <input type="hidden" name="offer" value="{{ offer }}" /> 
        </form> 

La vue:

def accept_booking(pr): 
    offer = pr.POST.get("offer") 
    print(offer) 

def decline_booking(pr): 
    offer = pr.POST.get("offer") 
    print(offer 

Le modèle:

class BookingOffer(models.Model): 
    artist = models.ForeignKey(Artist, null=True, related_name='artist') 
    artist_manager = models.ForeignKey(User, default=1, limit_choices_to= 
    {'groups__name': 'artist_manager'}) 
    comment = models.TextField(max_length=120, blank=True) 
    time_slot = models.ForeignKey('TimeSlot', null=True, blank=True) 
    price = models.IntegerField(null=True, blank=True) 
    tech_needs = models.TextField(blank=True) 
    approved_by_bm = models.BooleanField(default=False) 
    accepted_by_am = models.BooleanField(default=False) 

Répondre

1

En supposant {{ offer }} dans votre modèle contient l'identifiant BookingOffer:

from django.shortcuts import get_object_or_404, redirect 
from django.http import HttpResponseNotFound 

def accept_booking(request): 
    if request.method == 'POST': 
    offer_id = request.POST.get('offer', None) 
    offer = get_object_or_404(BookingOffer, pk=offer_id) 
    offer.approved_by_bm = True 
    offer.save() 
    return redirect('some-url') 

    return HttpResponseNotFound('<h1>Page not found</h1>') 

ou en utilisant des vues en fonction de la classe:

from django.shortcuts import get_object_or_404, redirect 
    from django.views.generic import View 

    class AcceptBookingView(View): 

     def post(request): 
      offer_id = request.POST.get('offer', None) 
      offer = get_object_or_404(BookingOffer, pk=offer_id) 
      offer.approved_by_bm = True 
      offer.save() 
      return redirect('some-url')