在Django 1.7中扩展现有的User模型

时间:2014-11-07 02:44:27

标签: python django django-1.7

我试图扩展django应用的用户模型,但我一直收到错误:
/ admin / auth / user / 3 / 中的OperationalError 异常值:没有这样的列: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

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,以下是我采取的解决问题的步骤。您没有指定您正在使用的数据库,但在我的情况下,我使用的是MySQL。从Django docs https://docs.djangoproject.com/en/1.8/topics/migrations/#mysql来看,似乎有时会创建表失败。我有一张叫做“管理”的桌子。并且一直未能检测到任何变化。

这是我做的:

  1. 从我的应用中删除迁移目录。这是为了创建新的迁移模式
  2. 重命名目录。我重新命名了来自' administration'的目录。捐赠者'。出于一些奇怪的原因,这似乎解决了这个问题。我不完全确定为什么,但可能是'管理'是MySQL或Django中的关键词
  3. 如果两个步骤都不起作用,则可能必须按照django文档中的指示手动添加更改。更简单的是,如果现有表为空,则可以将其删除并重新创建。 (警告!如果表格为空,请仅执行此操作,否则可能会丢失所有数据
  4. 总而言之,似乎没有直截了当的理由说明为什么会发生这种情况。我的试错法似乎已经解决了。

答案 1 :(得分:0)

你解决了这个问题吗?

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

好像第一次迁移时,数据库表有问题(我不知道这个问题是由什么造成的,所以你引发了错误:没有这样的列:subject_subject.user_id)

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

这是我做的:

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

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

3.then python manage.py makemigrations python manage.py migrate

成功!