Python 属性错误';用户';对象没有属性';用户条带';

Python 属性错误';用户';对象没有属性';用户条带';,python,django,attributes,Python,Django,Attributes,使用Stripe API在我的网站上创建信用卡结账表单。 我试图在应用程序签出的my view.py中测试以下行 print (request.user.userStripe.stripe_id) 这可能是我的用户设置方式。。我尝试从用户应用程序导入模型。我只是不明白为什么它看不见 我有两个应用程序:用户和结帐 我在调试页面中发现以下错误 AttributeError at /checkout/ 'User' object has no attribute 'userStripe' Reque

使用Stripe API在我的网站上创建信用卡结账表单。 我试图在应用程序签出的my view.py中测试以下行

print (request.user.userStripe.stripe_id)
这可能是我的用户设置方式。。我尝试从用户应用程序导入模型。我只是不明白为什么它看不见

我有两个应用程序:用户和结帐

我在调试页面中发现以下错误

AttributeError at /checkout/
'User' object has no attribute 'userStripe'
Request Method: GET
Request URL:    http://127.0.0.1:8000/checkout/
Django Version: 1.11
Exception Type: AttributeError
Exception Value:    
'User' object has no attribute 'userStripe'
Exception Location: /home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/lib/python3.4/site-packages/django/utils/functional.py in inner, line 239
Python Executable:  /home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/bin/python
Python Version: 3.4.3
Python Path:    
['/home/dominic/Desktop/Projects/decentraland/website/manaland/manaland',
 '/home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/lib/python3.4',
 '/home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/lib/python3.4/lib-dynload',
 '/usr/lib/python3.4',
 '/usr/lib/python3.4/plat-x86_64-linux-gnu',
 '/home/dominic/Desktop/Projects/decentraland/website/manaland/manaland/env/lib/python3.4/site-packages']
Server time:    Mon, 2 Jul 2018 22:38:35 +0000
签出.views.py

from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from users.models import User, profile, userStripe
from django.views import generic
from django.views.generic import CreateView


#TODO UPDATE WITH LIVE VERISON FOR STRIPE API KEYS

import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY

# Create your views here.
@login_required
def checkout(request):
    publishKey = settings.STRIPE_PUBLISHABLE_KEY
    print (request.user.userStripe.stripe_id)
    if request.method == 'POST':
        token = request.POST['stripeToken']
                # Token is created using Checkout or Elements!
        # Get the payment token ID submitted by the form:
        try:
            charge = stripe.Charge.create(
                amount=999,
                currency='usd',
                description='Example charge',
                source=token,
            )
        except stripe.error.CardError as e:

            pass
    context = {'publishKey': publishKey}
    template = 'checkout/checkout.html'
    return render(request, template, context)
from django.contrib.auth.models import AbstractUser
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _

from django.conf import settings
from allauth.account.signals import user_logged_in, user_signed_up
import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY



@python_2_unicode_compatible
class User(AbstractUser):

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = models.CharField(_('Name of User'), blank=True, max_length=255)
    bio = models.CharField( blank=True, max_length=255)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'username': self.username})

class profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    description = models.CharField( blank=True, max_length=255)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.user.username

class userStripe(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    stripe_id = models.CharField(max_length=200, null=True, blank=True)

    def __unicode__(self):
        if self.stripe_id:
            return str(self.stripe_id)
        else:
            return self.user.username

def stripeCallback(sender, request, user, **kwargs):
    user_stripe_account, created = userStripe.objects.get_or_create(user=user)
    if created:
        print ('created for %s'%(user.username))
    if user_stripe_account.stripe_id is None or user_stripe_account.stripe_id == '':
        new_stripe_id = stripe.Customer.create(email=user.email)
        user_stripe_account.stripe_id = new_stripe_id['id']
        user_stripe_account.save()


def profileCallback(sender, request, user, **kwargs):
    userProfile, is_created = profile.objects.get_or_create(user=user)
    if is_created:
        userProfile.name = user.username
        userProfile.save()

user_logged_in.connect(stripeCallback)
user_signed_up.connect(profileCallback)
user_signed_up.connect(stripeCallback)
users.models.py

from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from users.models import User, profile, userStripe
from django.views import generic
from django.views.generic import CreateView


#TODO UPDATE WITH LIVE VERISON FOR STRIPE API KEYS

import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY

# Create your views here.
@login_required
def checkout(request):
    publishKey = settings.STRIPE_PUBLISHABLE_KEY
    print (request.user.userStripe.stripe_id)
    if request.method == 'POST':
        token = request.POST['stripeToken']
                # Token is created using Checkout or Elements!
        # Get the payment token ID submitted by the form:
        try:
            charge = stripe.Charge.create(
                amount=999,
                currency='usd',
                description='Example charge',
                source=token,
            )
        except stripe.error.CardError as e:

            pass
    context = {'publishKey': publishKey}
    template = 'checkout/checkout.html'
    return render(request, template, context)
from django.contrib.auth.models import AbstractUser
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _

from django.conf import settings
from allauth.account.signals import user_logged_in, user_signed_up
import stripe
stripe.api_key = settings.STRIPE_SECRET_KEY



@python_2_unicode_compatible
class User(AbstractUser):

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = models.CharField(_('Name of User'), blank=True, max_length=255)
    bio = models.CharField( blank=True, max_length=255)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'username': self.username})

class profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    description = models.CharField( blank=True, max_length=255)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.user.username

class userStripe(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    stripe_id = models.CharField(max_length=200, null=True, blank=True)

    def __unicode__(self):
        if self.stripe_id:
            return str(self.stripe_id)
        else:
            return self.user.username

def stripeCallback(sender, request, user, **kwargs):
    user_stripe_account, created = userStripe.objects.get_or_create(user=user)
    if created:
        print ('created for %s'%(user.username))
    if user_stripe_account.stripe_id is None or user_stripe_account.stripe_id == '':
        new_stripe_id = stripe.Customer.create(email=user.email)
        user_stripe_account.stripe_id = new_stripe_id['id']
        user_stripe_account.save()


def profileCallback(sender, request, user, **kwargs):
    userProfile, is_created = profile.objects.get_or_create(user=user)
    if is_created:
        userProfile.name = user.username
        userProfile.save()

user_logged_in.connect(stripeCallback)
user_signed_up.connect(profileCallback)
user_signed_up.connect(stripeCallback)

您应该使用小写的型号名称,
print(request.user.userstripe.stripe\u id)
。 最好在
OneToOneField
中设置
related\u name
,这样您就可以确切地知道如何从
user
访问
userStripe

class userStripe(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='user_stripe')
    ...

print(request.user.user_stripe.stripe_id)

您没有在打印中键入userStripe(request.user.userStripe.stripe\u id) 尝试写入用户条带: 打印(request.user.userstripe.stripe\u id)
它对我非常有用

使用
request.user.userStripe.stripe\u id


您正在使用
request.User
。相反,您必须使用:
request.user

Good call,正如我想象的那样,新的错误是:“异常值:用户没有用户条带。”它必须引用另一个“用户”模型什么?您编写的代码与用户在问题中的代码相同。另外,已经有一个被接受的解决方案使用了您没有使用的东西。不,我的朋友在他使用的问题中使用了useStripe它应该写为useStripe“User”对象没有属性“userStripe”,因为用户有属性名为它userStripe而不是带有camelcase的userStripe
class userStripe(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='user_stripe')
    ...

print(request.user.user_stripe.stripe_id)