tutorial - Django ''No such table:'' para el perfil de usuario personalizado, ¿por qué?
django rest auth (2)
En primer lugar, si funcionó antes, no puedo explicar por qué ya no lo es. Debería inspeccionar el archivo sqlite y ver si la tabla está allí. (El archivo generalmente se encuentra en la raíz como db.sqlite3
, y se puede abrir con cualquier navegador estándar de sqlite)
Mencionaste que has estado ejecutando migrar, ¿pero ya está la migración real?
Ejecute python manage.py makemigrations
primero si no lo hizo. Si es necesario, verifique el archivo de migración en sí.
También está el comando python manage.py inspectdb
que podría darle una idea de los modelos que está utilizando.
Si aún no hay nada, puede, por supuesto, comenzar de cero. Probablemente me he perdido un atajo en alguna parte, pero yo:
- Cree una copia de los datos que necesita conservar (
python manage.py dumpdata --indent=4 <appname>
) (python manage.py dumpdata --indent=4 <appname>
en accesorios) - eliminar archivos de migraciones
- eliminar
db.sqlite3
- ejecutar
python manage.py makemigrations
- ejecutar
python manage.py migrate
- utilice
python manage.py loaddata <fixture-name>
para volver a cargar los datos antiguos
Me estoy arrancando los pelos tratando de descubrir por qué mi vista de perfil de usuario personalizado ya no funciona. Estoy usando django-allauth y he personalizado mi perfil de usuario creando un modelo con el campo de uno a uno para el usuario. Sin embargo, mi opinión es arrojar el error:
OperationalError at /profile/
no such table: user_profile
Request Method: GET
Request URL: http://localhost:8000/profile/
Django Version: 1.7.4
Exception Type: OperationalError
Exception Value:
no such table: user_profile
Exception Location: /usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py in execute, line 485
Python Executable: /usr/bin/python
Python Version: 2.7.6
Mi models.py con el perfil de usuario personalizado se ve así:
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.db import models
from allauth.account.models import EmailAddress
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name=''profile'')
# user visible settings
stop_reminders = models.BooleanField ( default=False,
help_text = ''Flag if user wants reminders not to be sent.'' )
stop_all_email = models.BooleanField ( default=False,
help_text = ''Flag if user wants no email to be sent.'' )
# hidden settings
is_premium = models.BooleanField ( default=False,
help_text = ''Flag if user has the premium service.'' )
def __unicode__(self):
return "{}''s profile".format(self.user.username)
class Meta:
db_table = ''user_profile''
def account_verified(self):
if self.user.is_authenticated:
result = EmailAddress.objects.filter(email=self.user.email)
if len(result):
return result[0].verified
return False
#User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)
Mi vista, que es un lugar para establecer la configuración del perfil de usuario, se ve así:
@login_required
def user_settings (request):
"""
User settings view, handles changing of user settings and
entry distribution (eventually)
"""
if request.method == ''POST'': # If the form has been submitted...
form = UserProfileForm(request.POST, instance=request.user.profile) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form.save ()
return render_to_response(''sm/profile_update_success.html'',
{},
context_instance=RequestContext(request))
else:
# create unbound form with initial values generated
# from the user''s profile
form = UserProfileForm (instance=request.user.profile)
return render ( request, ''profile.html'', { ''form'': form, } )
Hasta hace poco, esto funcionaba bien, y no estoy seguro de qué ha cambiado para que se detenga. ¿Alguien puede explicar por favor?
Estoy usando Django-1.7.4 y django-allauth-0.19.1. Para la depuración estoy usando sqllite, que he intentado crear usando python manage.py migrate
y python manage.py syncdb
.
Gahh, la respuesta fue que había comentado la entrada de mi aplicación principal de INSTALLED_APPS
. Que es tonto