28👍
On Mar 23, 2011, at 4:25 AM, Malcolm Box wrote:
Further investigation: looks like it’s a South/syncdb interaction. The
UserProfile will be created by the south migration, but of course that
hasn’t run when the auth post_install runs to prompt for a superuser.Sadly syncdb –migrate doesn’t do the right thing either.
For now, I’m just creating a superuser manually using ./manage.py
shell, but would welcome any ideas on how to solve this better.
Don’t create the super user during syncdb, you user profile table will not exist.
You must have a create signal on admin that creates a user profile, this looks
like it is failing
The procedure you wan to use to initialize the database is:
python manage.py syncdb --noinput
python manage.py migrate
python manage.py createsuperuser
Reference : https://groups.google.com/forum/?fromgroups=#!topic/django-users/sBXllxrIdMc
1👍
I just ran into this very same issue – a profile model that is created through a migration, and a signal handler that breaks when the superuser is created using the initial syncdb
.
My solution is as follows.
First of all, handle the case where the table doesn’t exist yet. This is a bit ugly and perhaps too drastic (may mask other errors)
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
try:
WheelProfile.objects.get_or_create(user=instance)
except DatabaseError:
logging.error("Failed to create profile for %s, perhaps migrations haven't run yet?" % instance)
from django.db import connection
connection._rollback()
Secondly, run a handler when migrations finish:
from south.signals import post_migrate
@receiver(post_migrate)
def create_profiles(app, **kwargs):
if app == "wheelcms_axle":
for u in User.objects.all():
WheelProfile.objects.get_or_create(user=u)
This will of course also run when doing future migrations, creating profiles for users that don’t have them. For me, that’s not an issue.
- Django: WSGIRequest' object has no attribute 'user' on some pages?
- Return image url in Django Rest Framework