Как указать какой юзер написал комментарий в джанго
Хочется передать динамически имя юзера в поле комментариев, но никак не выходит, вообщем я пробовал по разному это сделать, и вот так:
models.py
from django.db import models
from django.contrib.auth.models import User
class Comments(models.Model):
name = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField('Текст')
date = models.DateField('Дата публикации', auto_now_add=True)
и вот так:
models.py
from django.db import models
class Comments(models.Model):
name = models.CharField(max_length=100)
text = models.TextField('Текст')
date = models.DateField('Дата публикации', auto_now_add=True)
forms.py
from django.forms import ModelForm, TextInput, Textarea
from .models import Comments
class CommentsForm(ModelForm):
class Meta:
model = Comments
fields = ['name', 'text']
widgets = {
"name": TextInput(attrs={
'class': 'form-control',
'value': '{{ user.get_username }}'
}),
"text": Textarea(attrs={
'class': 'form-control',
'placeholder': 'Комент'
})
}
все равно не выходит занести имя пользователя после регистрации в обратную форму
P.s вот вьюха
views.py
def poshtwo(request):
error = ""
if request.method == 'POST':
form = ComentiForm(request.POST)
if form.is_valid():
form.save()
else:
error = "Пожалуйста, заполните поля корректно!!!"
return render(request, 'pepeic/cumin.html', {'djai': Comenti.objects.order_by('-datap'), 'nal': ComentiForm(), 'error': error})
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
Как один из вариантов:
form = ComentsForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.save()
или можно изначально передавать этот параметр в форму, тогда во view
form = ComentsForm(request.POST, edit_user = request.user)
if form.is_valid():
comment = form.save()
forms.py
class CommentsForm(ModelForm):
class Meta:
model = Comments
fields = ['name', 'text']
widgets = {
"name": TextInput(attrs={
'class': 'form-control',
'value': '{{ user.get_username }}'
}),
"text": Textarea(attrs={
'class': 'form-control',
'placeholder': 'Комент'
})
}
def __init__(self, *args, **kwargs):
self.edit_user = kwargs.pop('edit_user', None)
super().__init__(*args, **kwargs)
def save(self, *args, **kwargs):
self.instance.user = self.edit_user
return super().save(*args, **kwargs)
Так же ты зря используешь error = "Пожалуйста, заполните поля корректно!!!"
После валидации формы все ошибки формы будут храниться в form.errors и form.non_field_errors их можно оттуда брать и показывать пользователю