Django - запроса на соответствие членства не существует - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь создать службу стиля подписки на 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
...