python - Django IntegrityError UNIQUE 约束失败:plans_customer.user_id
问题描述
我的结帐视图有问题。通过电子邮件添加用户验证后,我收到完整性错误。我想知道如何解决这个问题。我已经检查了互联网上的一些解决方案,但它们都不适合我。
一些基本信息:
请求方法:POST
请求网址: http: //127.0.0.1 :8000/checkout
Django 版本:2.2.3
异常类型:IntegrityError
异常值:
唯一约束失败:plans_customer.user_id
这是我的结帐视图:
@login_required
def结帐(请求):
try:
if request.user.customer.membership:
return redirect('settings')
except Customer.DoesNotExist:
pass
coupons = {'bank':25, 'city':25}
if request.method == 'POST':
stripe_customer = stripe.Customer.create(email=request.user.email, source=request.POST['stripeToken'])
plan = 'price_1IC3TwL0fAQS9DO5lqZSmcew'
if request.POST['plan'] == 'yearly':
plan = 'price_1IC3TwL0fAQS9DO5IKzHz5ZI'
if request.POST['coupon'] in coupons:
percentage = coupons[request.POST['coupon'].lower()]
try:
coupon = stripe.Coupon.create(duration='once', id=request.POST['coupon'].lower(),
percent_off=percentage)
except:
pass
subscription = stripe.Subscription.create(customer=stripe_customer.id,
items=[{'plan':plan}], coupon=request.POST['coupon'].lower())
else:
subscription = stripe.Subscription.create(customer=stripe_customer.id,
items=[{'plan':plan}])
customer = Customer()
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()
msg_plain = render_to_string('mails/email.txt')
msg_html = render_to_string('mails/email.html')
subject = 'Welcome to J & M Traders'
recepient = str(request.user.email)
send_mail(subject,
msg_plain, EMAIL_HOST_USER, [recepient], html_message=msg_html)
return redirect('home')
else:
coupon = 'none'
plan = 'monthly'
price = 9999
og_dollar = 99.99
coupon_dollar = 0
final_dollar = 99.99
if request.method == 'GET' and 'plan' in request.GET:
if request.GET['plan'] == 'yearly':
plan = 'yearly'
price = 94999
og_dollar = 949.99
final_dollar = 949.99
if request.method == 'GET' and 'coupon' in request.GET:
print(coupons)
if request.GET['coupon'].lower() in coupons:
print('fam')
coupon = request.GET['coupon'].lower()
percentage = coupons[request.GET['coupon'].lower()]
coupon_price = int((percentage / 100) * price)
price = price - coupon_price
coupon_dollar = str(coupon_price)[:-2] + '.' + str(coupon_price)[-2:]
final_dollar = str(price)[:-2] + '.' + str(price)[-2:]
return render(request, 'plans/checkout.html',
{'plan':plan,'coupon':coupon,'price':price,'og_dollar':og_dollar,
'coupon_dollar':coupon_dollar,'final_dollar':final_dollar})
和我的模型:
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email_confirmed = models.BooleanField(default=False)
stripeid = models.CharField(default=False, max_length=255)
stripe_subscription_id = models.CharField(default=False, max_length=255)
cancel_at_period_end = models.BooleanField(default=False)
membership = models.BooleanField(default=False)
解决方案
推荐阅读
- vega - 如何避免两次设置组标记的宽度和高度?
- php - 设置媒体实体引用 [自定义字段]
- c# - 随机似乎输出相同的数字
- r - 无法在 Alpine Linux 下运行 rpy2:搜索列表中没有名为“package:utils”的项目
- node.js - 如何将命令的执行导出到新贵脚本
- python - 从单独的配置文件中使用 env 变量启动烧瓶仍然在生产中启动
- javascript - 给函数内部的变量赋值并在函数外部访问
- vue.js - 如何使用 npm run build 正确获取内部链接的 URL?
- binding - 我如何将新的颜色信息写入后台缓冲区
- c - 如何将嵌套结构数组作为参数传递给函数?