#python #django
#python #django
Вопрос:
Я пытался расширить пользовательскую модель с помощью поля XP. После написания кода (который, я думаю, правильный) Я решил попробовать это.
К сожалению, я получаю эту ошибку:
ProgrammingError at /register/
relation "accounts_userprofile" does not exist
LINE 1: INSERT INTO "accounts_userprofile" ("user_id", "xp") VALUES ...
^
Я думаю, это происходит потому, что я расширил пользовательскую модель, но не запустил миграции.
Вот мой код:
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib import auth
from .models import UserProfile
# 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 = User.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
user.UserProfile.xp = 0
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
from django.db.models.signals import post_save
from django.dispatch import receiver
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
xp = models.IntegerField(default=0)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Когда я запускаю python manage.py показать миграции Я не вижу никакой миграции для этого приложения, которое является приложением, созданным мной под названием «учетные записи».
Я думаю, что мне чего-то не хватает, потому что, когда у меня была другая модель, я выполнял миграцию, но она работала не так, как ожидалось. Теперь я не вижу никакой миграции для этого приложения, даже если я удалил из него папку migrations.
Итак, ошибка возникает из-за того, что не выполняется ‘migrate’? Если да, то как мне следует его запустить, потому что я не вижу никаких миграций для него.
Спасибо.
Комментарии:
1. сначала запустите
python manage.py makemigrations
2. @JibinMathews Я получаю сообщение «изменений не обнаружено»
3. делать python manage.py сделайте миграции <myapp>, где <myapp> — это имя вашего приложения [учетные записи]
4. Теперь это сработало. Спасибо. Если вы хотите, вы можете добавить это в качестве ответа, поэтому я приму его.
Ответ №1:
Вам нужно сделать
python manage.py makemigrations <myapp>
где находится название вашего приложения, это заставит django обнаруживать изменения в вашей модели
python manage.py migrate
зафиксируйте изменения в базе данных