Итак, в последний час я пытался внедрить поле XP в модель пользователя по умолчанию. Я изучил django docs и увидел, что есть два способа настройки аутентификации - либо расширение модели User, либо ее изменение.
Я решил просто расширить его, потому что мне нужно только добавить еще два или три поля в будущем. (Я пытаюсь добавить только это поле XP RS, чтобы я мог получить, как это должно быть сделано)
Я думал, что сделал это, пока не получил эту ошибку:
Объект «Менеджер» не имеет атрибута «create_user»
Насколько я знаю, это происходит потому, что метод create_user привязан к User, и я изменил модель. Вот строка, которая создает ошибку:
user = Utilizator.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
Так что я делаю это неправильно.
Вот код:
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.models import User
from .models import Utilizator
from django.contrib import auth
# Create your views here.
def login(req):
if req.method == 'POST':
username = req.POST['username']
password = req.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(req, user)
messages.success(req, 'Acum eşti logat')
return redirect('dashboard')
else:
messages.error(req, 'Numele de utilizator sau parola sunt greşite')
return redirect('login')
return
else:
return render(req, "../templates/pagini/login.html")
def register(req):
if req.method == 'POST':
first_name = req.POST['first_name']
last_name = req.POST['last_name']
username = req.POST['username']
email = req.POST['email']
password = req.POST['password']
password2 = req.POST['password2']
if password == password2:
if User.objects.filter(username=username).exists():
messages.error(req, 'Numele de utilizator deja există')
return redirect('register')
else:
if User.objects.filter(email=email).exists():
messages.error(req, 'E-mailul este deja folosit')
return redirect('register')
else:
user = Utilizator.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
user.save()
messages.success(req, 'Acum eşti logat')
return redirect('login')
else:
messages.error(req, 'Parolele diferă')
return redirect('register')
else:
return render(req, "../templates/pagini/register.html")
def dashboard(req):
return render(req, "../templates/pagini/dashboard.html")
models.py
from django.db import models
from django.contrib.auth.models import User
class Utilizator(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
xp = models.IntegerField(default=0)
Я понятия не имею, является ли это правильным способом сделать это. Я новичок и хочу узнать, как это сделать.
Так можно ли использовать этот models.py? Если это так, что я должен изменить на views.py?
Если нет, можете ли вы научить меня, как я должен делать все это? Большое спасибо.