Как исправить Невозможно присвоить "": "" должен быть экземпляром ""? когда создается модель FK?

Я хочу создать модель с представлением, когда пользователь создан, но я получил ошибку:
Невозможно присвоить "<User:test1234": "Customer_info.customer" должен быть экземпляром "Customer".

Вот модели, которые у меня есть и которые я хочу создавать автоматически при регистрации пользователя.

class Customer(models.Model):
      user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
      points = models.FloatField(default = 0.0)
      ...

class Customer_info(models.Model):
      customer = models.OneToOneField(Customer, on_delete=models.CASCADE)
      deposit = models.FloatField(default = 0.0)

А в views.py после регистрации эти модели создаются

def reg(request):
    form = CreateUserForm()
    if "register-btn" in request.POST:
        form = CreateUserForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            login(request, new_user)

            Customer.objects.create(
                user=new_user, points=0.0
            )

            Customer_info.objects.create(
                customer = new_user, deposit = 0.0  
                # HERE IS THE PROBLEM, IN THE customer field
            )

            response = redirect('profile')
            return response
    return render(request, 'main.html')

Как показывает ошибка, вы присваиваете экземпляр User полю customer, которое имеет отношение foreignkey к Customer

Ваша логика должна выглядеть следующим образом:

def reg(request):
    form = CreateUserForm()
    if "register-btn" in request.POST:
        form = CreateUserForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            login(request, new_user)

            # store the new customer in a variable
            customer = Customer.objects.create(
                user=new_user, points=0.0
            )

            Customer_info.objects.create(
                # assign it to `customer` field
                customer = customer, deposit = 0.0  
            )

            response = redirect('profile')
            return response
    return render(request, 'main.html')


Вернуться на верх