8

我想使用AbstractUser添加一個字段到Django的標準用戶模型。這是我的代碼:數據庫錯誤:沒有這樣的表:auth_user。擴展AbstractUser和使用模型註冊管理

class GUser(AbstractUser): 
    uuid = UUIDField(auto=True) 

這一直是成功的,因爲從殼,我可以說,

>>> a = GUser.objects.all() 

>>> a 
[<GUser: User1>] 

>>> a[0].uuid 
UUID('7d1f0b7b52144a2ea20db81ce74741e3') 

我有被登記在/管理新用戶的問題。當我創建一個新用戶,我得到一個數據庫錯誤:

no such table: auth_user 

之前,我得到更多的到它,這是我的forms.py:

class GUserChangeForm(UserChangeForm): 
    class Meta: 
     model = get_user_model() 

class GUserCreationForm(UserCreationForm): 

    class Meta: 
     model = get_user_model() 

    def clean_username(self): 
      username = self.cleaned_data["username"] 
      try: 
       get_user_model().objects.get(username=username) 
      except get_user_model().DoesNotExist: 
       return username 
      raise forms.ValidationError(self.error_messages['duplicate']) 

我的admin.py:

class GUserAdmin(UserAdmin): 
    form = GUserChangeForm 
    add_form = GUserCreationForm 
    fieldsets = (
     (None, {'fields': [('username', 'password')]}), 
     ('Personal info', {'fields': ('is_active','is_staff','is_superuser','groups', 'user_permissions')}), 
     ('Important dates', {'fields': ('last_login', 'date_joined')}), 
     #('Universal ID', {'fields': ('uuid')}) 
     ) 

admin.site.register(GUser,GUserAdmin) 

我讀到,當出現這種情況給其他人,他們實現自己的形式(像我一樣)覆蓋clean_username(個體經營):

但是,當我試圖從管理員添加用戶時,我認爲這不會被調用。即使我註冊了我的GUserAdmin,auth.forms.py文件也會被調用。另外,當我刪除我的數據庫(sqlite3),然後調用python manage.py syncdb時,我發現auth_user表實際上並沒有被創建。

是的,我在settings.py中包含了AUTH_USER_MODEL。

任何幫助將不勝感激。

我已閱讀: https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

隨着噸SO職位,但他們都不來解決我遇到的問題。

+1

看起來像這個線程有你的答案:https://groups.google。com/forum /#!topic/django-users/kOVEy9zYn5c 顯然,自定義模型沒有兌現管理員的'Meta' – karthikr

+0

@karthikr我看過那個頁面,但不確定我們是否有同樣的問題。解決方案是否真的改變了auth.forms.py中的代碼? – FrancescoA

+0

我認爲這是3月20日Scott Anderson的回答 – karthikr

回答

0

因此刪除了我對此所做的所有工作,並與標準用戶一起移動,以便我可以取得進展。然後有一天我回到了它,並設法讓它在一個小時內運行。 我會發布代碼以供參考,但我無法真正指出造成差別的原因。我知道創作形式和東西沒有必要。

models.py

class PropaUser(AbstractUser): 
    uuid = UUIDField(auto=True) 

admin.py

from django.contrib import admin 
from login.models import PropaUser 

admin.site.register(PropaUser) 

settings.py

AUTH_USER_MODEL = "login.PropaUser" 

其他models.py

class Word(models.Model): 
    user = models.ManyToManyField(settings.AUTH_USER_MODEL) 
    deck = models.ManyToManyField(Deck) 
    word = models.CharField(max_length=100) 

    def __unicode__(self): # Python 3: def __str__(self): 
    return self.word 

這是什麼工作。我不知道是什麼原因導致了所有問題,因爲我認爲在發佈此問題之前我嘗試了這種方法。這可能不是一個令人滿意的答案,但這是工作。早些時候,我還對將其添加到現有用戶所需的內容感到困惑。就是這個。

+0

我現在有同樣的問題。當它沒有註冊從「UserAdmin」繼承的東西時,它就起作用。 'admin.site.register(GUser,GUserAdmin)'''與'admin.site.register(PropaUser)' – toabi

+0

當我使用Django 1.6進行測試時,我最終直接能夠直接編輯所有字段(包括內置密碼字段的散列結果)! – aaaronic

相關問題