我可以将客户模型链接到用户模型吗?

时间:2020-09-28 14:41:42

标签: python django

我正在一个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)

1 个答案:

答案 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()