Сам процесс создания профиля элементарен.
profile = UserProfile(user=request.user)
profile.save()
Чуть больше возможностей для творчества в том, где именно его создавать.
Вариант №1 monkey patching:
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
Вариант №2 в том же models.py, где объявлена модель профиля:
@receiver(post_save, sender=User, dispatch_uid="create_profile")
def update_profile(sender, instance, **kwargs):
if kwargs["created"]:
UserProfile.objects.create(user=instance)
Если используется что-нибудь типа django-registration, то можно использовать её сигналы.
Вариант №3 в auth.py (если используете свой механизм аутентификации):
class SomeAuthBackend(ModelBackend):
def get_user(self, user_id):
try:
user = User.objects.select_related('profile_set').get(pk=user_id)
try:
user.profile_set
except UserProfile.DoesNotExist:
UserProfile.objects.create(user=user)
return user
except User.DoesNotExist:
return None
Профиль будет создаваться при входе пользователя.
Вариант №4 в admin.py:
admin.site.unregister(User)
class UserProfileInline(admin.StackedInline):
model = UserProfile
@admin.register(User)
class UserProfileAdmin(UserAdmin):
inlines = [ UserProfileInline ]
def save_model(self, request, obj, form, change):
super(UserProfileAdmin, self).save_model(request, obj, form, change)
if not change:
UserProfile.objects.create(user=obj)
Профиль будет создаваться при создании юзера в админке.
А можно и в какой-нибудь специальной view.