Как передать несколько форм из views.py в формы и получить их в forms.py и добавить в поля HiddenInput в django 2.1.7? S - PullRequest
0 голосов
/ 26 марта 2019

Я новичок в 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 определено " ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...