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")
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
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
Sie sollten überprüfen, was 'request.user' aus Ihrer Sicht ergibt ... –