gpt4 book ai didi

python - 将自定义字段添加到默认用户模型 - 如果扩展它,我应该进行迁移吗?

转载 作者:行者123 更新时间:2023-12-01 08:08:00 24 4
gpt4 key购买 nike

我一直在尝试使用 XP 字段扩展用户模型。写完代码(我认为是正确的)后,我决定尝试一下。

不幸的是,我收到此错误:

ProgrammingError at /register/
relation "accounts_userprofile" does not exist
LINE 1: INSERT INTO "accounts_userprofile" ("user_id", "xp") VALUES ...
^

我认为发生这种情况是因为我扩展了用户模型,但没有运行迁移。这是我的代码: View .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")

模型.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 时,我看不到此应用程序的任何迁移 - 这是我以“accounts”名称创建的应用程序。

我认为我错过了一些东西,因为当我有另一个模型时,我进行了迁移,但它没有按预期工作。现在,即使我从中删除了迁移文件夹,我也看不到此应用程序的任何迁移。

那么错误是否来自未运行“迁移”?如果是,我应该如何运行它,因为我看不到它的任何迁移。

谢谢。

最佳答案

你需要做

python manage.py makemigrations <myapp>您的应用程序的名称在哪里, 这将使 django 检测到模型的更改

python manage.py migrate将更改提交到数据库

关于python - 将自定义字段添加到默认用户模型 - 如果扩展它,我应该进行迁移吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com