[Fixed]-Can't Create Super User Django

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.

Leave a comment