【问题标题】:Extending the existing User model in Django 1.7在 Django 1.7 中扩展现有的用户模型
【发布时间】:2014-11-07 02:44:27
【问题描述】:

我正在尝试扩展 django 应用程序的用户模型,但我不断收到 错误:
OperationalError at /admin/auth/user/3/
异常值:没有这样的列:subjects_subject.user_id

我的代码:

#subjects/models.py
from django.contrib.auth.models import User
from django.db import models


class Subject(models.Model):
    user = models.OneToOneField(User)
    description = models.CharField(max_length=100)

models.signals.post_save

#_admin/admin.py
from django.contrib.auth.models import User, Group
from django.contrib.auth.admin import UserAdmin, GroupAdmin
from .extended_admin import new_admin

from django.contrib import admin
from subjects.models import Subject

class SubjectInline(admin.StackedInline):
    model = Subject
    can_delete = False
    verbose_name_plural = 'subject'

class UserAdmin(UserAdmin):
    inlines = (SubjectInline, )

new_admin.register(User, UserAdmin)
new_admin.register(Group, GroupAdmin)

我几乎逐字复制了 Django 自己的documentation。任何帮助将不胜感激!

编辑: 我还想说我跑过syndbflush

【问题讨论】:

  • 你运行迁移了吗?
  • 您是否添加了user 字段 执行初始syncdb/migrate 之后?如果是这样,您可能需要运行 makemigrations
  • 我跑过makemigrations
  • 你在settings.py的installed_apps中添加了这个应用吗?

标签: python django django-1.7


【解决方案1】:

我遇到了同样的问题,这里是我为解决它而采取的步骤。您没有指定您正在使用的数据库,但在我的情况下,我使用的是 MySQL。从这里的 Django 文档https://docs.djangoproject.com/en/1.8/topics/migrations/#mysql 看来,有时创建表会失败。我有一个名为“管理”的表,并且一直无法检测到任何更改。

这是我所做的:

  1. 从我的应用程序中删除迁移目录。这是为了创建新的迁移模式
  2. 重命名目录。我将我的目录从“管理”重命名为“捐助者”。出于某种奇怪的原因,这似乎解决了这个问题。我不完全确定为什么,但可能是“管理”是 MySQL 或 Django 中的一个关键词
  3. 如果这两个步骤都不起作用,您可能必须按照 django 文档中的说明手动添加更改。更简单的是,如果现有表为空,您可以删除它并重新创建它。 (警告!请仅在表格为空时执行此操作,否则您可能会丢失所有数据

总而言之,目前似乎没有明确的理由说明为什么会发生这种情况。我的反复试验方法似乎已经解决了它。

【讨论】:

    【解决方案2】:

    这个问题你解决了吗?

    我有同样的问题,经过不同的尝试,我解决了这个问题。我正在使用 sqlite3 。

    好像你第一次迁移的时候,数据库表有问题(我不知道这个问题是什么引起的,所以你提出错误:没有这样的列:subjects_subject.user_id)

    如果您删除迁移目录并重新迁移,这将无法解决此问题,因为 Django 会跟踪 django_migrations 表中的所有应用迁移。迁移是伪造的,因为该表已经存在(可能具有过时的模式)所以我删除了 django_migrations 表中的所有行。

    这是我所做的:

    1.在我的 django 应用中删除迁移目录中的所有文件

    2. 使用 python manage.py dbshell ,然后使用 DELETE FROM django_migrations WHERE app='your-app-nameDELETE FROM django_migrations WHERE ID='your-first-migrate

    3.然后python manage.py makemigrationspython manage.py migrate

    成功了!

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 2023-03-22
      • 2016-10-12
      • 2011-02-28
      • 2013-12-06
      • 2018-01-21
      相关资源
      最近更新 更多