我正在一个django电子商务网站上,用户必须是客户。但是,当我创建一个新用户时,它将其分配给超级用户而不是新用户,并出现以下错误:
Exception Value: User has no customer.
但是我也可以转到管理面板,然后将客户重新分配给用户。 django admin panel
请问该如何解决?
我的customer model
class Customer(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=255, null=True)
email = models.CharField(max_length=255, null=True)
def __str__(self):
return self.name
members/views.py
创建新的用户和客户
from django.shortcuts import render
from django.views import generic
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from shop.models import Customer
from django.views.generic import CreateView
from .forms import CreateCustomerForm
# Create your views here.
class UserRegisterView(generic.CreateView):
form_class = UserCreationForm
template_name = 'registration/signup.html'
success_url = reverse_lazy('customer')
class CreateCustomerView(CreateView):
form_class = CreateCustomerForm
template_name = 'registration/customerProfile.html'
success_url = reverse_lazy('login')
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
我的商店视图
def shop(request):
data = cartData(request)
cartItems = data['cartItems']
products = Product.objects.all()
context = {'products': products, 'cartItems': cartItems}
return render(request, 'shop/shop.html', context)
答案 0 :(得分:0)
客户模型与用户模型具有一对一的唯一关系。
使用contrib.auth.models.User
示例:
class Customer(models.Model):
user = models.ForeignKey(User, unique=True, related_name='customer')
反之(稍微超出问题范围),您可以编辑用户模型以添加客户
from django.contrib.auth.models import User, UserManager
class CustomUser(User):
# Add the column you want o add.
# Use UserManager to get the create_user method, etc.
objects = UserManager()