提问者:小点点

Django OneToOneField未创建表


谢谢,这是我的users/models.py文件:

from django.db import models
from django.contrib.auth.models import User


class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)

def __str__(self):
    return "{} profile".format(self.user.username)

然后运行python manage.py makemigrations+python manage.py migrate,一切似乎都很好,但它没有创建一个表users_profile:

1146,“表'polls_db.users_profile'不存在”)+当我试图操作profile时抛出shell。

我检查了我的mariadb数据库,确实没有users_profile表。

我还在学习django,它在以前的sqlite数据库项目中运行良好,有解决方案吗?

编辑:当切换到默认的sqlite3数据库时,会自动创建users_profile,尽管我在sqlite3数据库中遇到另一个问题,这次它不想创建一个名为Population的列:

Class Question(models.Model):
    id = models.AutoField(
        primary_key=True)
    question_text = models.CharField("Question", max_length=200)
    pub_date = models.DateTimeField(
        "date de publication", default=timezone.now )
    popularity = models.IntegerField("popularité", default=0) 

django.db.utils.OperationalError:表polls_question没有名为population的列

编辑2:安装了PostgreSQL并且一切正常,users_profile被自动创建并且没有其他模型的问题,就像我在sqlite3中经历的一样,这不是一个解决方案,只是想让你知道


共2个答案

匿名用户

我在这段代码中没有看到任何错误。 尝试将数据库更改为SQLite,看看是否仍然发生错误,可能是数据库设置的问题

匿名用户

我用defaut sqlite3替换了mariadb数据库,是的,它创建了users_profile,这是mysql的一个已知错误吗? 我想继续用它

my Settings.py数据库(如果可能的话):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'polls_db',
        'USER': os.environ.get("MYSQL_U"),
        'PASSWORD': os.environ.get("MYSQL_P"),
        'HOST': '',
        'PORT': "",
    }


}