Как определить текущего пользователя из модели?

Есть модель:
class Post(models.Model):
    title = models.CharField(max_length=127)
    datetime = models.DateTimeField(default=datetime.now())
    author = models.ForeignKey(User)
    content = models.TextField(max_length=4095)


В поле author, по умолчанию должен быть вписан пользователь, создающий запись.
Я знаю, что делать нужно через параметр default, но как определить текущего пользователя?

P.S.
Возможно, что правильным будет определять пользователя через саму форму создания поста, а не из модели?
  • Вопрос задан
  • 6020 просмотров
Решения вопроса 1
Sardar
@Sardar
Нет, default там не нужен. Скорее всего User у вас из django.contrib.auth.models.User. А это значит, что у вас стоит AuthenticationMiddleware. А это значит, что у вас есть пользователь request.user, попробуйте его напечатать из вашего view. Значит вы можете post.author = request.user

Ваша форма скорее всего не включает поле с пользователем, а значит сохранять надо как post = form.save(commit=False), чтобы форма записала данные в post, но не пыталась его сохранить. Потом вы присваиваете пользователя.

А вообще, стоило бы полностью пройти туториал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dibrovsd
А чем не устроили сигналы?
Создание экземпляров модели может быть инициировано по цепочке сигналов или как-то по другому, а не только через админку.

Да и что теперь, писать один и тот же код в админке, всех views и так далее.

Внутри сигнала получить текущего пользователя без обращения к объекту request поможет вот такая middleware:
djangosnippets.org/snippets/2179
Она работает и свою задачу выполняет.

P.S. Если нужно описать более подробно, говорите.
Не стал описывать в деталях, чтоб не быть К.О.
Но если не получится разобраться самостоятельно, готов помочь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 авг. 2020, в 19:51
2000 руб./за проект
07 авг. 2020, в 19:24
4000 руб./за проект