Я новичок в Django и пытаюсь добавить комментарии к записи в блоге в Django 2.1. При добавлении комментариев к сообщению мне нужно сохранить user_id зарегистрированного пользователя и post_id этого комментария. Я определил свою модель комментариев со связями с публикацией и пользовательскими моделями, как показано ниже:
class Comments(models.Model):
comment = models.CharField(max_length=120, null=True, )
name = models.CharField(max_length=120, null=True)
created_by = models.ForeignKey(User, related_name='created_by', null=True, on_delete=models.PROTECT)
post_name = models.ForeignKey(Post, related_name='post_name', null=True, on_delete=models.PROTECT)
def __str__(self):
return self.comment
Существует код шаблона, где я использую CommentForm и получаю комментарии от пользователя:
{% if user.is_authenticated %}
<form method="POST" action=" ">
<div class="form-group"></div>
{% csrf_token %}
{{ form.as_p }}
<input type='submit' class="btn btn-success" />
</form>
{% else %}
<a href="{% url 'login' %}">Add Comment</a>
{% endif %}
Я использовал __init__()
метод в CommentForm, чтобы получить post_id и user_id. Этот метод отлично работает для первого параметра 'post' , получает post_id и сохраняет его, но не работает для получения user_id 'create' . Я хочу получить сеанс user_id и передать его из views.py в forms.py и сохранить его с созданием комментария, аналогично получению post_id. Можно ли передать более одного параметра из views.py и передать его в форму и получить их в этой форме для сохранения в этой модели?
Вот код, который я написал для выполнения вышеуказанных функций:
veiws.py
Мой метод создания комментариев:
def details(request, id):
instance = get_object_or_404(Post, id=id)
if request.method == 'GET':
form = CommentForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
form = CommentForm(request.POST or None, request.FILES or None, post=instance.id) # get and pass post_id of related post
if request.method == 'POST':
if request.user:
user = request.user.id
form = CommentForm(request.POST or None, request.FILES or None, create=user) # Wants to get the session user id and pass it to forms.py
forms.py
В моем CommentForm у меня есть следующий метод:
def __init__(self, args, *kwargs):
post = kwargs.pop('post', '')
super(CommentForm, self).__init__(*args, **kwargs)
if post:
self.fields['post_name'] = forms.ModelChoiceField(queryset=Post.objects.filter(pk=post))
create = kwargs.pop('create', '')
print(kwargs)
super(CommentForm, self).__init__(*args, **kwargs)
if create:
self.fields['created_by'] = forms.ModelChoiceField(queryset=Comments.objects.filter(created_by=create))
Приведенный выше код работает для первого параметра 'post' , но не для второго параметра 'create' и дает "имя" create 'not определено " ошибка.