Как исправить Невозможно присвоить "": "" должен быть экземпляром ""? когда создается модель 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')