Как я могу получить зарегистрированного пользователя в методе save?
Как я могу получить зарегистрированного пользователя, self.request.user, в методе save в файле models.py?
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
как написали в комментарии метод save у модели не имеет никакой связи с запросами, если по каким-то причинам тебе нужно, что бы при сохранении как-то использовать пользователя из request.user, то тебе нужно этого пользователя передать в ModelForm, которую используешь для сохранения модели. Например есть модель:
class Comment(models.Model):
text = models.TextField(label="Комментарий")
user = models.ForeignKey(User, blank=True)
...
есть форма для редактирования. в эту форму добавим обработку параметра request_user
class CommentEditForm(forms.ModelForm):
class Meta:
exclude = ('user',)
model = Comment
def __init__(self, *args, **kwargs):
self.request_user = kwargs.pop('request_user', None)
super().__init__(*args, **kwargs)
def clean():
cleaned_data = super().clean()
if self.request_user.is_anonymous():
self.add_error(None, 'Для того, что бы оставить комментарий зарегистрируйтесь')
return cleaned_data
def save(self, *args, **kwargs):
self.instance.user = self.request_user
return super().save(*args, **kwargs)
теперь во view, который отвечает за сохранение модели будем передавать значение request.user в форму
def comment_save_view(request, id=None):
try:
comment = Comment.objects.get(id=id) if id else None
except Comment.DoesNotExist:
comment = None
form = CommentEditForm(request.POST if request.POST else None, request_user = request.user)
if request.POST:
if form.is_valid():
form.save()
return HttpResponseRedirect('url to redirect')
return render(request, 'template.html', {
'form': form,
})