首页 > 解决方案 > 在 Django 网上商店中创建客户

问题描述

我正在开发一个 Django 网上商店,并希望像标题一样创建一个客户。我用 HTML 制作了一个登录表单,并用 JSON 回复服务器。在数据库中创建一个新用户工作正常。然后是客户部分,因为如果我不为每个用户分配一个客户,我会收到一个错误:“用户没有客户”。所以我尝试使用此功能在数据库中创建一个新客户并将其分配给新创建的用户。

c = Customer(user="Lukas", name="Lukas", email="lukas@lukasalstrup.dk", about="Account has just been created") # Create a new customer and assign the newly created user
c.save() # Save the customer in the system

当我这样做时,我得到一个错误:

Cannot assign "'Lukas'": "Customer.user" must be a "User" instance.

虽然我在系统中有一个名为 Lukas 的用户。这当然会在以后更改,但我只是想让它工作,然后再放入变量。

我的 models.py 客户类

class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank = True)
    name = models.CharField(max_length=200, null=True)
    email = models.EmailField(max_length=200, null=True)
    about = models.CharField(max_length=100, null=True)

    def __str__(self):
        return self.name

views.py 注册页面:

def registerPage(request):
    if request.user.is_authenticated:
        return redirect('/')
    else:
        form = CreateUserForm()
        if request.method == 'POST':
            form = CreateUserForm(request.POST)
            if form.is_valid():
                form.save()
                user = form.cleaned_data.get('username')    
                messages.success(request, 'Account was created for ' + user)
                c = Customer(user="Lukas", name="Lukas", email="lukas@lukasalstrup.dk", about="Account has just been created") # Create a new customer and assign the newly created user
                c.save() # Save the customer in the system

                return redirect('login')
            


        context = {'form':form}
        return render(request, 'store/register.html', context)

我尝试了几种方法,例如将用户更改为 request.user anf {{request.user}}。这些都不起作用。我无法从 Django 中找到任何涵盖该内容的文档。
提前致谢

标签: pythondjangosqlite

解决方案


user应该是一个对象,User例如登录用户:

def registerPage(request):
    if request.user.is_authenticated:
        return redirect('/')
    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            messages.success(request, 'Account was created for ' + user)
            Customer.objects.create(
                user=user,
                name='Lukas',
                email='lukas@lukasalstrup.dk',
                about='Account has just been created'
            )
            return redirect('login')
        context = {'form':form}
        return render(request, 'store/register.html', context)

推荐阅读