2017-11-07 1 views
0

In meiner Ansicht Funktion versuche ich, 2 Änderungen an dem aktuellen Benutzer vorzunehmen; Betrachten Sie ihn als Premium-Abonnenten, indem Sie das Modellfeld is_premium_subscriber als True markieren und ihn zu einer Gruppe mit dem Namen Premium Agents hinzufügen.request.user lässt mich keine Änderungen am aktuellen Benutzer vornehmen?

Die Änderungen scheinen jedoch nicht in meiner views.py! Hier ist mein Code:

def payment_response(request): 
    new_charge = PremiumSubscriptionCharge() 

    if request.method == "POST": 
     ... Some code here 

    try: 

     ... lots of code here 

     new_charge.agent = request.user # This line is working fine, meaning request.user is properly assigned to the current user 

     request.user.is_premium_subscriber = True # This is not working, is_premium_subscriber is still false after the request 

     premium_agent_group = Group.objects.get(name='Premium Agents') 
     premium_agent_group.user_set.add(request.user) # This is not working either, the current user does not get added to the group. 

     request.user.save() # I don't know if this is necessary, but I put it here just in case. 


    except stripe.error.CardError as ce: 
     ... some code 

    else: 
     ... some code 

Mein Benutzermodell als Referenz. Ich habe ein benutzerdefiniertes Benutzermodell erstellt, indem ich AbstractUser geerbt habe ... Könnte das das Problem verursacht haben?

class Agent(AbstractUser): 
    is_premium_subscriber = models.BooleanField(default=False) 

Voll Ansichten Funktion:

def payment_response(request): 
    new_charge = PremiumSubscriptionCharge() 

    if request.method == "POST": 
     token = request.POST.get("stripeToken") 

    try: 

     customer = stripe.Customer.create(
      email = request.user.email, 
      source = token, 
     ) 
     charge = stripe.Charge.create(
      amount = 1500, 
      currency = 'cad', 
      customer = customer.id, 
      description = "Agent Premium Subscription" 
     ) 

     subscription = stripe.Subscription.create(
      customer=customer.id, 
      items=[ 
       { 
        "plan": "premiumagent", 
       }, 
      ], 
     ) 


     new_charge.stripe_charge_id = charge.id 
     new_charge.agent = request.user 
     new_charge.customer = charge.customer 
     new_charge.stripe_subscription_id = subscription.id 
     request.user.is_premium_subscriber = True 
     premium_agent_group = Group.objects.get(name='Premium Agents') 
     premium_agent_group.user_set.add(request.user) 
     request.user.save() 


    except stripe.error.CardError as ce: 
     return False, ce 

    else: 
     new_charge.save() 
     return redirect("payment_success") 
+0

Die 'request.user.save()' ** ist ** notwendig. Der Code, den du gepostet hast, sollte funktionieren. Vielleicht können die Änderungen rückgängig gemacht werden, wenn Sie eine Ausnahme treffen. – Alasdair

+1

Haben Sie [benutzerdefiniertes Benutzermodell] aktiviert (https://docs.djangoproject.com/de/1.11/topics/auth/customizing/#substituting-a-custom-user-model), indem Sie 'AUTH_USER_MODEL = 'yourapp setzen. Agent'' in deinen Einstellungen? – Alasdair

+0

Sie sollten überprüfen, was 'request.user' aus Ihrer Sicht ergibt ... –

Antwort

0

Okay, ich auf etwas anderes arbeitete, kam es zurück, und jetzt ist es funktioniert. Was zum. Danke an diejenigen, die kommentiert haben.

Verwandte Themen