Не могу понять в чем ошибка:confirmation_code = ConfirmationCode(user=user, code=code)?

Ссылка скопирована
7 марта 2026 1 ответ

models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import User

class UserCreationForm(models.Model):
name = models.CharField('Имя', max_length=50)
surname = models.CharField('Фамилия', max_length=50)

def __str__(self):
return self.name

class Meta:
verbose_name = 'Ученики'
verbose_name_plural = 'Ученики'
class TableBase(models.Model):
name = models.CharField('Имя', max_length=50)
surname = models.CharField('Фамилия', max_length=50)

def __str__(self):
return self.name

class Meta:
verbose_name = 'Ученики'
verbose_name_plural = 'Ученики'

class User(AbstractUser):
pass

class Person(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
class User(models.Model):
name = models.CharField('Имя', max_length=50)
surname = models.CharField('Фамилия', max_length=50)

class ConfirmationCode(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
code = models.CharField(max_length=4)

def __str__(self):
return self.code

forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm as BaseUserCreationForm
from django.contrib.auth.models import User
from django import forms

class UserCreationForm(BaseUserCreationForm):
class Meta:
model = User
fields = ('username', 'password1', 'password2')

class RegistrationForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'password', 'email']

views.py:

import sqlite3
from django.views.generic import ListView
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate, login
from .forms import RegistrationForm
from .models import ConfirmationCode
import secrets

def success_view(request):
return render(request, 'main/profil.html')

def enter_confirmation_code_view(request):
if request.method == 'POST':
entered_code = request.POST['code']
user = request.user
confirmation_code = ConfirmationCode(user=user, code=code)
if confirmation_code.code == entered_code:
user.is_active = True
user.save()
return redirect('success')
else:
# Код подтверждения неверный, показать сообщение об ошибке
return render(request, 'main/enter_confirmation_code.html', {'error_message': 'Неверный код подтверждения'})
else:
return render(request, 'main/enter_confirmation_code.html', {})

def registration_view(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
user = User.objects.create_user(username, email, password)
# Генерация уникального кода подтверждения
code = secrets.token_urlsafe(8)
confirmation_code = ConfirmationCode(user=user, code=code)
confirmation_code.save()

send_mail(
'Код подтверждения регистрации',
f'Ваш код подтверждения: {code}',
settings.EMAIL_HOST_USER,
[email],
fail_silently=False,
)
return redirect('/enter_confirmation_code/')
else:
form = RegistrationForm()
return render(request, 'main/registration.html', {'form': form})
Сами ошибки выглядят так:
ValueError: Cannot assign "": "ConfirmationCode.user" must be a "User" instance
причем в бд пользователь сохраняется

ValueError at /register/
Cannot assign "": "ConfirmationCode.user" must be a "User" instance.

line 42, in registration_view
confirmation_code = ConfirmationCode(user=user, code=code)

Дополнительно:

Ошибка во вставке кода без соответствующего тега

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

Для начала давайте разберем вашу строчку кода:

```php
confirmation_code = ConfirmationCode(user=user, code=code)
```

Ошибка здесь заключается в том, что вы пытаетесь присвоить результат вызова функции `ConfirmationCode()` переменной `confirmation_code`, но вы не используете оператор присваивания. В PHP оператор присваивания - это знак `=`.

Правильный синтаксис должен выглядеть так:

```php
$confirmation_code = new ConfirmationCode(user, code);
```

Здесь мы создаем новый объект класса `ConfirmationCode` и передаем ему параметры `user` и `code`. Примечание: в PHP для создания объекта используется ключевое слово `new`.

Также убедитесь, что у вас есть определение класса `ConfirmationCode` с конструктором, который принимает параметры `user` и `code`. В противном случае это вызовет ошибку.

Итак, вот как ваш код должен выглядеть с учетом вышеперечисленных изменений:

```php
$confirmation_code = new ConfirmationCode($user, $code);
```

Пожалуйста, попробуйте внести эти исправления в ваш код и проверьте, работает ли он корректно. Если у вас остались дополнительные вопросы или проблемы, не стесняйтесь задавать. Буду рад помочь!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно