Модель one user для auth и user django

Я использую функцию аутентификации Django для создания пользователей. Я также хочу расширить возможности пользователя, чтобы он мог добавлять такие вещи, как изображения профиля и другую информацию.

Моя проблема в том, что теперь мне нужно управлять пользовательскими моделями. Один от Auth и один из созданной мной модели. В любом случае объединить в 1 модель, пожалуйста?

из urls.py:

path('accounts/',include('django.contrib.auth.urls'))

из models.py:

class User(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    firstName = models.CharField(max_length=200)
    lastName = models.CharField(max_length=200)
    image= models.ImageField(upload_to='profile_image',default='profile_image/SSMILE.jpg')

из views.py

class SignUp(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

I have 2 User models Как видите, у меня есть 2 модели User. Мне нужно создать пользователя auth через регистрацию, а затем на моей домашней странице сделать это:

if str(request.user) != "AnonymousUser":
    try:
        getuser = User.objects.get(user=request.user)
        print(getuser)
    except User.DoesNotExist:
        newUser= User(user=request.user,firstName=request.user,lastName="change")
        newUser.save()

чего я хочу избежать.

Спасибо

Есть хорошая документация для настройки модели пользователя: docs.djangoproject.com/en/2.1/topics/auth/customizing/…

ruddra 26.10.2018 08:55

лучший способ - кастомизация модели simpleisbetterthancomplex.com/tutorial/2016/07/22/…

Ravi Bhushan 26.10.2018 08:59
0
2
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавляете еще одну модель с таким же именем User. Это уже есть. Если вы расширяете свою модель пользователя, вам больше не нужно добавлять first_name или last_name,

Проверь это,

class Profile(models.Model):
   profile_picture = models.ImageField(upload_to=#add your path)
   user = models.OneToOneField(User, on_delete=models.CASCADE)


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
      Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
     instance.profile.save()

Это расширит вашу существующую модель пользователя.

Спасибо, Бидхан, когда я пытаюсь удалить свою модель пользователя, чтобы заменить ее моделью профиля, я получаю эту ошибку, когда пытаюсь перенести django.db.utils.ProgrammingError: отношение "fc_user" не существует. Вы знаете, как решить эту проблему, пожалуйста ?

mogoli 26.10.2018 09:38

Удалось разобраться, пришлось удалить миграции, относящиеся к пользователю, а затем создать профиль. Спасибо

mogoli 26.10.2018 18:51

Другие вопросы по теме