2014-11-07 77 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

成功!