django - runserver - Error de la base de datos: no hay tal tabla: auth_user. Extendiendo AbstractUser y usando el modelo para registrarse en admin
python manage.py migrate (1)
Así que eliminé todo el trabajo que había hecho con esto y seguí con el usuario estándar para poder avanzar. Entonces, un día volví y logré que funcionara en una hora. Publicaré el código como referencia, pero realmente no puedo precisar cuál fue la diferencia. Sé que las formas de creación y esas cosas no eran necesarias.
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"
otros modelos.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
Esto es lo que está funcionando. No sé qué estaba causando todos los problemas antes porque creo que probé este método antes de publicar esta pregunta. Puede que esta no sea una respuesta satisfactoria, pero esto es lo que está funcionando. Anteriormente también estaba confundido acerca de lo que se necesita simplemente para agregar un campo al usuario existente. Eso es todo.
Estoy tratando de usar AbstractUser para agregar un campo al modelo de Usuario estándar de Django. Este es mi código:
class GUser(AbstractUser):
uuid = UUIDField(auto=True)
Esto ha sido exitoso porque desde el caparazón puedo decir,
>>> a = GUser.objects.all()
>>> a
[<GUser: User1>]
>>> a[0].uuid
UUID(''7d1f0b7b52144a2ea20db81ce74741e3'')
El problema que estoy teniendo es registrar un nuevo usuario de / admin. Cuando creo un nuevo usuario, aparece un error en la base de datos:
no such table: auth_user
Antes de profundizar en esto, aquí está mi 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''])
Y mi 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)
Leí que cuando esto le sucedió a otras personas, implementaron sus propios formularios (como yo lo hice) para sobrescribir clean_username (self):
Sin embargo, no creo que se llame cuando intento agregar un usuario del administrador. El archivo auth.forms.py se está llamando aunque registro mi GUserAdmin.
Además, cuando elimino mi base de datos (sqlite3) y luego llamo a python manage.py syncdb, veo que una tabla auth_user en realidad no se está creando.
Sí, he incluido AUTH_USER_MODEL en settings.py.
Cualquier ayuda sería muy apreciada.
Junto con toneladas de mensajes de SO, pero ninguno de ellos parece solucionar el problema que estoy teniendo.