Не могу понять в чем ошибка:confirmation_code = ConfirmationCode(user=user, code=code)?
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)
Дополнительно:
Ошибка во вставке кода без соответствующего тега
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для начала давайте разберем вашу строчку кода:
```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);
```
Пожалуйста, попробуйте внести эти исправления в ваш код и проверьте, работает ли он корректно. Если у вас остались дополнительные вопросы или проблемы, не стесняйтесь задавать. Буду рад помочь!