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")
'request.user.save()' **は**必要です。投稿したコードはうまくいくはずです。おそらく、例外が発生した場合、変更はロールバックされる可能性があります。 – Alasdair
あなたは[AUTH_USER_MODEL = 'yourapp]を設定することで[あなたのカスタムユーザモデルを有効にしました](https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a-custom-user-model)しましたか?エージェントの設定で? – Alasdair
あなたのビューで 'request.user'が何をもたらすかを調べるべきです... –