2014-11-07 58 views
0

我试图扩展Django应用程序的用户模型中的现有用户模式,但我不断收到错误:在/管理/认证/用户
OperationalError/3/
异常值:没有这样的列:subjects_subject.user_id扩展在Django 1.7

我的代码:

#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

+0

您是否运行迁移? – dgel 2014-11-07 02:47:52

+0

你添加了'user'字段_after_进行初始syncdb/migrate吗?如果是这样,您可能需要运行['makemigrations'](https://docs.djangoproject.com/en/dev/ref/django-admin/#makemigrations-app-label) – karthikr 2014-11-07 02:48:15

+0

我已经跑过'makemigrations' – Wallace 2014-11-07 02:50:06

回答

0

我有同样的问题,这里是我把解决这个问题的步骤。你没有指定你正在使用的数据库,但在我的情况下,我正在使用MySQL。从Django文档https://docs.djangoproject.com/en/1.8/topics/migrations/#mysql看来有时候创建表失败。我有一张名为“管理”的表格,并且一直未能检测到任何变化。

这里是我做过什么:

  1. 删除migration目录从我的应用程序。这是为了创建新的迁移模式
  2. 重命名目录。我将我的目录从'administration'更名为'donor'。由于一些奇怪的原因,这似乎解决了这个问题。我不完全确定为什么,但可能是'管理'是MySQL或Django中的关键词
  3. 如果这两个步骤都不起作用,您可能必须手动添加django文档中指示的更改。更容易,你可以删除现有的表,如果它是空的并重新创建它。 (警告!请只有这样做,如果表是空的,否则你可能失去所有的数据

一切的一切,似乎没有直接的理由,为什么这可能会在瞬间发生。我的试错法似乎已经解决了它。

0

你解决了这个问题吗?

我有同样的问题,经过不同的尝试,我解决了这个问题。我正在使用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.then python manage.py makemigrationspython manage.py migrate

成功!