Я пытаюсь создать службу стиля подписки на Django (используя Django3) В принципе, у меня это работало ... i sh, но мои ключи клиента полосы не добавлялись, поэтому я возился чтобы разобраться в этом. Теперь я получаю эту ошибку - Membership matching query does not exist.
это всякий раз, когда я пытаюсь создать учетную запись, войти в систему или войти в систему с правами администратора моего проекта Django.
Я действительно не могу понять, что проблема в том, что я отменил внесенные мной изменения, чтобы cust-Id (любые подсказки здесь были бы признательны! lol) снова работал, но он все еще бросает его на меня.
Вот мой код в своих моделях я даже не могу точно определить, откуда эта проблема, если честно. (Я получил это в основном из учебника Just Django, кстати!)
Отладка говорит, что это связано с переменной free_membership
в методе post_save_usermembership_create
.
Итак пока что у меня есть только models.py и admin.py, чтобы все это заработало -
from django.conf import settings
from django.db import models
from django.db.models.signals import post_save
from datetime import datetime
import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY
MEMBERSHIP_CHOICES = (
('Regular', 'reg'),
('Premium', 'premium'),
('Free', 'free')
)
class Membership(models.Model):
slug = models.SlugField()
membership_type = models.CharField(
choices=MEMBERSHIP_CHOICES,
default='Free',
max_length=30)
price = models.IntegerField(default=15)
stripe_plan_id = models.CharField(max_length=40)
def __str__(self):
return self.membership_type
class UserMembership(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
stripe_customer_id = models.CharField(max_length=40)
membership = models.ForeignKey(
Membership, on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.user.username
def post_save_usermembership_create(sender, instance, created, *args, **kwargs):
user_membership, created = UserMembership.objects.get_or_create(
user=instance)
if user_membership.stripe_customer_id is None or user_membership.stripe_customer_id == '':
new_customer_id = stripe.Customer.create(email=instance.email)
free_membership = Membership.objects.get(membership_type='Free')
user_membership.stripe_customer_id = new_customer_id['id']
user_membership.membership = free_membership
user_membership.save()
post_save.connect(post_save_usermembership_create,
sender=settings.AUTH_USER_MODEL)
class Subscription(models.Model):
user_membership = models.ForeignKey(
UserMembership, on_delete=models.CASCADE)
stripe_subscription_id = models.CharField(max_length=40)
active = models.BooleanField(default=True)
def __str__(self):
return self.user_membership.user.username