8

Ich versuche, mit AbstractUser ein Feld zu Djangos Standardbenutzermodell hinzuzufügen. Dies ist mein Code:Datenbankfehler: keine solche Tabelle: auth_user. Erweitern von AbstractUser und Verwenden des Modells zum Registrieren auf admin

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

Diese erfolgreich war, weil aus der Schale kann ich nur sagen,

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

>>> a 
[<GUser: User1>] 

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

Das Problem Ich bin von der/admin Registrierung eines neuen Benutzers. Wenn ich einen neuen Benutzer erstellen erhalte ich einen Datenbankfehler:

no such table: auth_user 

Bevor ich mehr in sie zu erhalten, hier ist mein 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']) 

Und mein 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) 
ich

lesen, dass, wenn diese zu anderen Menschen passiert ist sie ihre eigene Formen umgesetzt (wie ich) clean_username (Selbst-) zu überschreiben:

Ich glaube jedoch nicht, dass dies aufgerufen wird, wenn ich versuche, einen Benutzer aus dem Admin hinzuzufügen. Die Datei auth.forms.py wird aufgerufen, obwohl ich mein GUserAdmin registriere.

Auch wenn ich meine Datenbank (sqlite3) lösche und dann python manage.py syncdb aufrufen, sehe ich, dass eine auth_user Tabelle tatsächlich nicht erstellt wird.

Ja, ich habe AUTH_USER_MODEL in settings.py aufgenommen.

Jede Hilfe würde sehr geschätzt werden.

Ich habe gelesen: https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#custom-users-and-the-built-in-auth-forms

Zusammen mit Tonnen SO Beiträge aber keiner von ihnen scheint das Problem zu beheben das ich habe.

+1

Dieser Thread hat Ihre Antwort: https://groups.google.com/forum/#! topic/django-users/kOVEy9zYn5c Anscheinend, Custom Model nicht die 'Meta' für Manager – karthikr

+0

@karthikr Ich hatte diese Seite gesehen, war aber nicht sicher, ob wir das gleiche genaue Problem hatten. Ist die Lösung, den Code in auth.forms.py tatsächlich zu ändern? – FrancescoA

+0

Ich denke, es ist Scott Anderson's Antwort am 20. März – karthikr

Antwort

0

Also löschte ich die ganze Arbeit, die ich damit gemacht hatte und ging mit dem Standardbenutzer weiter, damit ich Fortschritte machen konnte. Dann ging ich eines Tages zurück und schaffte es in einer Stunde zu arbeiten. Ich poste den Code als Referenz, aber ich kann nicht wirklich festlegen, was den Unterschied ausmacht. Ich weiß, dass die Erstellungsformen und Zeug nicht notwendig waren.

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" 

andere 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 

Das funktioniert. Ich weiß nicht, was all die Probleme verursacht hat, weil ich glaube, dass ich diese Methode ausprobiert habe, bevor ich diese Frage gestellt habe. Das ist vielleicht keine befriedigende Antwort, aber das funktioniert. Früher war ich auch verwirrt darüber, was es braucht, um dem bestehenden Benutzer ein Feld hinzuzufügen. Das ist es.

+0

Ich habe das gleiche Problem gerade jetzt. Es funktioniert, wenn man sich nicht mit etwas registriert, das von "UserAdmin" geerbt wurde. 'admin.site.register (GUser, GUserAdmin)' vs. 'admin.site.register (PropaUser)' – toabi

+0

Als ich dies mit Django 1.6 versuchte, konnte ich nur alle Felder direkt bearbeiten (einschließlich der Hash-Ergebnis des integrierten Passwortfelds)! – aaaronic

Verwandte Themen