Django как связать пользователей с Usermodel

Здравствуйте, я довольно новичок в Django и пока не понимаю фундаментальных идей о Пользователях. Я смог создать страницу регистрации для создания пользователей, которые отображаются на странице администратора в разделе "Authentication and AUthorization -> Users".

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

Для этого я создал модель:

    class Profile(models.Model):
        firstname = models.CharField(max_length=50)
        lastname = models.CharField(max_length=50)
        bio = models.TextField()
        profile_pic = models.ImageField(upload_to="images/")
        def __str__(self):
            return self.firstname + ' | ' + self.lastname

В моем представлении и html я могу добавить эти данные в модель. Но КАК именно я могу связать эту "Профиль"-модель с отдельным пользователем? Что я здесь упускаю?

Вы можете сделать это через добавление отношения OneToOneField между Profile и стандартным User:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    firstname = models.CharField(max_length=50)
    lastname = models.CharField(max_length=50)
    bio = models.TextField()
    profile_pic = models.ImageField(upload_to="images/")
    def __str__(self):
        return self.firstname + ' | ' + self.lastname

Вы можете внести OneToOneField в AUTH_USER_MODEL настройку [Django-doc]. Эта настройка содержит строку с квалифицированным именем модели пользователя. Это лучше, чем ссылка на модель User django.contrib.auth.models.User, потому что если вы позже создадите пользовательскую модель пользователя, ссылки на эту модель пользователя будут обновлены:

from django.conf import settings

class Profile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    # …

Для получения дополнительной информации смотрите раздел ссылка на модель пользователя в документации Django.

Вернуться на верх