Добавление настраиваемого поля в модель пользователя по умолчанию - если его расширить, следует ли выполнять миграции? - PullRequest
1 голос
/ 31 марта 2019

Я пытался расширить пользовательскую модель с помощью поля 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 showmigrations, я не вижу никакой миграции для этого приложения - этоприложение, созданное мной под именем «account».

Я думаю, что что-то упустил, потому что когда у меня была другая модель, я выполнял миграцию, но она не работала, как ожидалось.Теперь я не вижу никакой миграции для этого приложения, даже если я удалил из него папку миграций.

Так что ошибка возникает из-за того, что не выполняется миграция?Если да, то как мне его запустить, потому что я не вижу никаких миграций для него.

Спасибо.

1 Ответ

1 голос
/ 31 марта 2019

Вам нужно сделать

python manage.py makemigrations <myapp> где имя вашего приложения, это заставит django обнаружить изменения в вашей модели

python manage.py migrate зафиксировать изменения в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...