我的电子商务网站中有两个应用程序,我一直在关注YouTube上的特定教程。在课程中,该人员使用django-allauth软件包进行登录。我按照课程进行操作,但是在account应用中创建了自定义用户模型,扩展了AbstracBaseUser类。
我创建了另一个名为product
的应用程序,在其中处理了所有电子商务逻辑。这里是代码:
models.py
(帐户)(产品)class MyAccountManager(BaseUserManager): def create_user(self, email, username, first_name, last_name, gstin_no, phone_no, password=None): if not email: raise ValueError("Users must have an email address") if not username: raise ValueError("Users must have a username") if not first_name: raise ValueError("Users must have First Name") if not last_name: raise ValueError("Users must have Last Name") if not gstin_no: raise ValueError("Users must have a valid GSTIN Number") if not phone_no: raise ValueError("Users must have a valid Phone Number") user = self.model( email=self.normalize_email(email), username=username, first_name=first_name, last_name=last_name, gstin_no=gstin_no, phone_no=phone_no, ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, username, first_name, last_name, gstin_no, phone_no, password): user = self.create_user( email=self.normalize_email(email), password=password, username=username, first_name=first_name, last_name=last_name, gstin_no=gstin_no, phone_no=phone_no, ) user.is_admin = True user.is_staff = True user.is_superuser = True user.save(using=self._db) return user class Account(AbstractBaseUser): email = models.EmailField(verbose_name="email", max_length=60, unique=True) username = models.CharField(max_length=30, unique=True) date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True) last_login = models.DateTimeField(verbose_name='last login', auto_now=True) is_admin = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) first_name = models.CharField(verbose_name="first name", max_length=20) last_name = models.CharField(verbose_name="last name", max_length=20) gstin_no = models.CharField(verbose_name='gstin no', max_length=15, unique=True) phone_no = models.BigIntegerField(unique=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username', 'first_name', 'last_name', 'gstin_no', 'phone_no', ] objects = MyAccountManager() def __str__(self): return self.email def has_perm(self, perm, obj=None): return self.is_admin def has_module_perms(self, app_label): return True
models.py
(产品)class UserProfile(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) stripe_customer_id = models.CharField(max_length=50, blank=True, null=True) one_click_purchasing = models.BooleanField() def __str__(self): return self.user.username def userprofile_receiver(sender, instance, created, *args, **kwargs): if created: userprofile = UserProfile.objects.create(user=instance) post_save.connect(userprofile_receiver, sender=settings.AUTH_USER_MODEL)
views.py
class PaymentView(LoginRequiredMixin, View): def get(self, *args, **kwargs): order = Order.objects.get(user=self.request.user, ordered=False) if order.billing_address: context = { 'order': order, 'DISPLAY_COUPON_FORM': False } userprofile = self.request.user.userprofile if userprofile.one_click_purchasing: #fetch the user's card list cards = stripe.Customer.list_sources( userprofile.stripe_customer_id, limit = 3, object = 'card' ) card_list = cards['data'] if len(card_list) > 0: # update the card with the default card context.update({ 'card': card_list[0] }) return render(self.request, 'product/payment.html', context) else: messages.warning(self.request, "You have not added a billing address.") return redirect("checkout")
我得到的错误是:RelatedObjectDoesNotExist at /payment/stripe/帐户没有用户个人资料。
我如何使它正常工作。我无法从这里得到关于什么地方出问题的概念。
我的电子商务网站中有两个应用程序,我一直在关注YouTube上的特定教程。在课程中,该人员使用django-allauth软件包进行登录。我遵循了课程...
转到django管理员,检查是否创建了用户配置文件。如果不。然后可能您已经在添加此信号功能之前添加了用户。