微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

/ CustomUser的RelatedObjectDoesNotExist没有客户

如何解决/ CustomUser的RelatedObjectDoesNotExist没有客户

Hlw,我正在处理一个Djang0 2.2.15项目,我使用allauth设置了我的用户帐户,我使用了一个名为def cartData(request)的函数:在utils.py中,我在views.py函数调用了该函数

    def cartData(request):
    if request.user.is_authenticated:
         customer = request.user.customer
         order,created = 
         Order.objects.get_or_create(customer=customer,complete=False)
         items = order.orderitem_set.all()
         cartItems = order.get_cart_items
     else:
          cookieData = cookieCart(request)
          cartItems = cookieData['cartItems']
          order = cookieData['order']
          items = cookieData['items']

      return {'cartItems':cartItems,'order':order,'items':items}

在models.py中,我与用户使用一对一关系的类是

from django.db import models
from django.conf import settings
from django.urls import reverse
from django.contrib.auth import get_user_model

class Customer(models.Model):
     user = models.OnetoOneField(settings.AUTH_USER_MODEL,null=True,blank=True,on_delete=models.CASCADE)
     name = models.CharField(max_length=200,null=True)
     email = models.CharField(max_length=200)
 
     def __str__(self):
         return self.name

但是,每当我运行项目时,我都会在控制台上发现此错误

users.models.CustomUser.customer.RelatedobjectDoesNotExist: CustomUser 
has no customer.

浏览器中错误消息的屏幕截图如下,

Browser error message Browser error message

我创建用户

forms.py,下面的代码

class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = get_user_model()
        fields = ('email','username',)

CustomUserChangeForm(UserChangeForm)类:

    class Meta:
        model = get_user_model()
        fields = ('email',)

下面给出了users / views.py的代码

from django.views import generic

from .forms import CustomUserCreationForm

class SignupPageView(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

解决方法

好吧,CustomUserCreationForm的代码应该只创建User实例,而不创建任何Customer实例。因此,您可以更改表单代码以创建Customer对象。像这样:

#create_form
class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = get_user_model()
        fields = ('email','username',)

    def save(self,commit=False):
        user = super().save(commit=True)
        # Creating the customer object
        Customer.objects.create(user=user,name=self.cleaned_data['name'],email=self.cleaned_data['email'])
        return user

# update form
class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = get_user_model()
        fields = ('email',commit=False):
          user = super().save(commit=True)
          Customer.objects.update_or_create(user=user,email=self.cleaned_data['email'],defaults={'user':user})
          return user

仅供参考,您无需存储email模型中的nameUser信息。如果需要访问它们,请使用用户user.customer.nameuser.customer.email

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。