Как добавить email вошедшего пользователя в поле в модели напрямую без использования представления в django
В моей модели есть поле, как показано ниже
uploaded_by = models.CharField(max_length=255, blank=True, null=True, editable=False)
В этом поле будет храниться имя пользователя (в данном случае - электронная почта) пользователя, загрузившего данные. Как вы видите, это поле не редактируется, поэтому пользователь никак не сможет его изменить. Данные должны быть введены с канала администратора. Я хотел узнать, есть ли способ заполнить это поле именем пользователя, вошедшего в систему и загружающего данные. Я знаю, что если я использую представление, я могу сделать что-то вроде
uploaded_by = request.user
Есть ли способ сделать то же самое непосредственно в модели, чтобы я мог использовать канал администратора напрямую для хранения имени пользователя без использования представления.
Зачем создавать заново, если кто-то уже сделал библиотеку 😀
Вы можете использовать django-currentuser.
Вам просто нужно сделать это в вашем models.py
from django_currentuser.middleware import (
get_current_user, get_current_authenticated_user)
# As model field:
from django_currentuser.db.models import CurrentUserField
class Foo(models.Model):
created_by = CurrentUserField()
updated_by = CurrentUserField(on_update=True)
Также не забудьте добавить промежуточное программное обеспечение в settings.py
MIDDLEWARE = (
...,
'django_currentuser.middleware.ThreadLocalUserMiddleware',
)
Хотя это не совсем сохраняет email пользователя, это сохраняет ссылку пользователя, что еще лучше, вы получите все данные пользователя, сделав created_by.email etc
Метод сохранения может сделать следующее
def save(self, *args, **kwargs):
self.uploaded_by = self.your_user
return super( your_model , self).save(*args, **kwargs)