【问题标题】:Django OneToOneField not creating tableDjango OneToOneField 没有创建表
【发布时间】:2020-10-10 11:35:12
【问题描述】:

提前致谢,这是我的 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' 不存在") 在管理部分 + 相同时,我尝试操作配置文件扔了外壳。

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

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

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

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 没有列 命名人气

编辑 2:安装了 PostgreSQL,一切正常,users_profile 自动创建,与我使用 sqlite3 时遇到的其他模型没有问题,这不是解决方案,只是想让你知道

【问题讨论】:

  • 您是否在 INSTALLED_APPS 的设置中添加了用户应用?
  • 是的,先生,这是 mysite/mysite/settings.py 的 INSTALLED_APPS 部分 INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'users.apps.UsersConfig', 'django.contrib. admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]
  • 执行 python manage.py makemigrations 后,迁移文件是否会在应用程序的迁移文件夹中自行创建?
  • 我已经删除了所有内容并从头开始重新启动,但仍然相同,是的,它创建了一个迁移文件夹 + 文件,makemigrations 之后的 shell 输出:“用户”的迁移:users/migrations/0001_initial.py -创建模型配置文件,mysql数据库中还是什么都没有
  • 如果我在没有 django 的情况下直接在 mariadb 中创建表,它会起作用吗?

标签: mysql django database


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果有帮助,我的 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': "",
        }
    
    
    }
    

    【讨论】:

    • 你使用的是什么版本的 Django 和 MariaDB?
    • Django 3.0 和 mariadb Ver 15.1 Distrib 10.4.13-MariaDB,适用于使用 readline 5.1 的 Linux (x86_64),应该是我在 arch 上运行的最新版本(或者这可能是问题,哈哈)
    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2015-09-07
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多