如何解决/ 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
模型中的name
和User
信息。如果需要访问它们,请使用用户user.customer.name
或user.customer.email
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。