条带ID保存到Django AbstractUser选项卡中的新行

2024-05-16 02:47:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我能够通过Stripe成功完成测试订阅付款。但是,当我检查我的Postgresql用户数据库表时,我发现在签出和条带客户创建过程中,条带id和条带订阅id被保存到一个新用户。所需的行为是将这两条数据添加到当前登录用户的配置文件中。我正在使用一个自定义的AbstractUser模型,并怀疑问题就在那里。我很感激在正确的方向上解决这个问题

enter image description here

下面是我的相关代码片段:

models.py

# users/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass
    # add additional fields in here
    stripeid = models.CharField(max_length=255)
    stripe_subscription_id = models.CharField(max_length=255)

forms.py

# users/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email')

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = UserChangeForm.Meta.fields

管理员

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm

admin.site.register(CustomUser, CustomUserAdmin)

views.py

# pages/views.py
import os
from django.shortcuts import render, get_object_or_404, redirect
from django.urls import reverse_lazy
from django.views import generic
from django.views.generic import TemplateView
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required, user_passes_test
from users.models import CustomUser
import stripe

stripe.api_key = os.environ.get('STRIPE_SECRET_KEY')

def checkout(request):

    if request.method == 'POST':
        stripe_customer = stripe.Customer.create(email=request.user.email, source=request.POST['stripeToken'])
        plan = 'redacted' # MONTHLY plan ID from Stripe subscriptions
        if request.POST['plan'] == 'yearly':
            plan = 'redacted' # YEARLY plan ID from Stripe subscriptions
        else:
            subscription = stripe.Subscription.create(customer=stripe_customer.id,
            items=[{'plan':plan}])

        customer = CustomUser()
        customer.user = request.user
        customer.stripeid = stripe_customer.id
        customer.membership = True
        customer.cancel_at_period_end = False
        customer.stripe_subscription_id = subscription.id
        customer.save()

        return redirect('home')    
})

谢谢你的帮助


Tags: djangofrompyimportauthidmodelsrequest