2017-11-07 9 views
0

私のビュー機能では、現在のユーザーに2つの変更を加えようとしています。モデルフィールドis_premium_subscriberをTrueとマークし、彼をPremium Agentsというグループに追加することによって、彼にプレミアムサブスクライバと見なします。request.userは現在のユーザーに変更を許可していませんか?

しかし、変更は私のviews.pyに登録されていないようです!以下は私のコードです:

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 

私のユーザモデルを参考にしてください。 AbstractUserを継承してカスタムのUserモデルを作成しましたが、これが問題の原因になる可能性がありますか?

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

完全なビュー機能:私は何か他のものに取り組んでいた

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

'request.user.save()' **は**必要です。投稿したコードはうまくいくはずです。おそらく、例外が発生した場合、変更はロールバックされる可能性があります。 – Alasdair

+1

あなたは[AUTH_USER_MODEL = 'yourapp]を設定することで[あなたのカスタムユーザモデルを有効にしました](https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a-custom-user-model)しましたか?エージェントの設定で? – Alasdair

+0

あなたのビューで 'request.user'が何をもたらすかを調べるべきです... –

答えて

0

オーケー、それに戻って来て、今では働いています。何が。コメントした人にありがとう。