Задать вопрос

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

Есть модель:
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.
Возможно, что правильным будет определять пользователя через саму форму создания поста, а не из модели?
  • Вопрос задан
  • 8869 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 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. Если нужно описать более подробно, говорите.
Не стал описывать в деталях, чтоб не быть К.О.
Но если не получится разобраться самостоятельно, готов помочь.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы