Django AttributeError: 'AddComments' object has no attribute 'user'

новичок в джанго, сижу только изучаю, пишу что-то вроде блога с комментариями и ответом на них, столкнулся в данный момент с проблемой AttributeError: 'AddComments' object has no attribute 'user'. Возможно кто-то сможет помочь исправить и объяснить в чем я ошибся, чтобы в дальнейшем не допускать оибок таких. Уже голову всю сломал.

news/models.py

from django.db import models
from django.utils import timezone
import time
from datetime import date, datetime
from django.urls import reverse
from django.contrib.auth.models import User

# Create your models here.



class Author(models.Model):
name = models.CharField("Имя", max_length=100)
nickname = models.CharField("Ник", max_length=30, null=True)
age = models.PositiveSmallIntegerField("Возраст", default=0)
image = models.ImageField("Изображение", upload_to="authors/")
#news = models.ManyToManyField(
 #   News, verbose_name="Новости автора", on_delete=models.CASCADE, null=True
#)

def __str__(self):
    return self.name

class Meta:
    verbose_name = "Автор"
    verbose_name_plural = "Авторы"

class Category(models.Model):
    name = models.CharField("Имя", max_length=150)
    description = models.TextField("Описание")
    url = models.SlugField(max_length=160, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Категория"
        verbose_name_plural = "Категории"

class News(models.Model):
    title = models.CharField("Название новости", max_length=75)
    text = models.TextField("Содержание")
    image = models.ImageField("Изображение",upload_to="news_images/")
    authors = models.ForeignKey(
        User, verbose_name="автор", related_name="news_author", on_delete=models.CASCADE, null=True
    )
    categories = models.ForeignKey(
        Category, verbose_name="категория", on_delete=models.SET_NULL, null=True
    )
    pub_date = models.DateField("Дата публикации", default=date.today)
    pub_time = models.TimeField("Время публикации", default=time.strftime('%H:%M'))
    url = models.SlugField(max_length=160, unique=True)
    draft = models.BooleanField("Черновик", default=False)


    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("news_detail", kwargs={"slug": self.url})

    def get_comments(self):
        return self.comments_set.filter(parent__isnull=True)

    class Meta:
        verbose_name = "Новость"
        verbose_name_plural = "Новости"

class PhotosNews(models.Model):
    title = models.CharField("Фотографии", max_length=100)
    image = models.ImageField("Изображение",upload_to="news_photos/")
    news = models.ForeignKey(News, verbose_name="Новость", on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "Фотографии к новости"
        verbose_name_plural = "Фотографии к новости"

class Comments(models.Model):
    # email = models.EmailField()
    # name = models.CharField("Имя", max_length=100)
    text = models.TextField("Сообщение", max_length=1000)
    user = models.ForeignKey(
        User, verbose_name='пользователь', on_delete=models.CASCADE, blank=True, null=True
    )
    parent = models.ForeignKey(
        'self', verbose_name="Родитель", on_delete=models.SET_NULL, blank=True, null=True
    )
    news = models.ForeignKey(News, verbose_name="новость", on_delete=models.CASCADE)
    date = models.DateField("Дата публикации", default=date.today)
    time = models.TimeField("Время публикации", default=time.strftime('%H:%M'))

    def __str__(self):
        return f"{self.user} - {self.news}"

    class Meta:
        verbose_name = "Комментарий"
        verbose_name_plural = "Комментарии"

views.py

from django.shortcuts import render, redirect
from django.views.generic.base import View
from django.views.generic import DetailView, ListView
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required

from .models import *
from .forms import *

class UserView(ListView):
    model = User
    queryset = User.objects.all()

    def username_view(self, request):
        user = User.objects.get(username = request.POST['username'])
        last_login = user.last_login
        return last_login

class UserDetailView(DetailView):
    model = User
    slug_field = "username"


class BaseView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'base.html', {})

class NewsView(ListView):
    model = News
    queryset = News.objects.filter(draft=False)

class NewsDetailView(DetailView):
    model = News
    slug_field = "url"


class AddComments(View):
    @login_required
    def post(self, request, pk):
        print(request.POST)
        form = CommentsForm(request.POST)
        news = News.objects.get(id=pk)
        if form.is_valid():
            form = form.save(commit=False)
            form.user = request.user
            form.save()
            if request.POST.get('parent', None):
                form.parent_id = int(request.POST.get('parent'))
            form.news = news
            form.save()
        return redirect(news.get_absolute_url())

forms.py

from django import forms
from django.contrib.auth.models import User

from .models import *


class CommentsForm(forms.ModelForm):
    class Meta:
        model = Comments
        fields = {'user', 'text'}

news_detail.html

{% extends 'news/base.html' %}
{% load static %}
{% block title %} {{ news.title }} {% endblock title %}
{% block content %}

    <div class="news_title">
        <h1>{{ news.title }}</h1>
    </div>
    <div class="news_image">
        <img src="{{ news.image.url }}" class="img-fluid" alt="" width="854" height="480">
    </div>
    <div class="news_text">
        <div>
            <h3>{{ news.text }}</h3>
        </div>
    </div>
    <div class="news_author">
        <a href="{{ user.get_absolute_url }}">{{ user.username }} </a>
    </div>
    <div class="news_publishe_date">
        {{ news.pub_date }}
    </div>

    <div class="contact-single">
                    <h3 class="editContent" style="outline: none; cursor: inherit;">
                                    Оставить комментарий</h3><h6>{{ news.comments_set.count }} комментариев</h6>
        {% if user.is_authenticated %}
                    <form action="{% url 'add_comments' news.id %}" method="post" class="mt-4" id="formComments">
                        {% csrf_token %}
                        <input type="hidden" name="parent" id="contactparent" value="">
                        <div class="form-group editContent">
                            <label for="contactcomment" class="editContent">
                                Ваш комментарий *
                            </label>
                            <textarea class="form-control border" rows="5" name="text"
                                      id="contactcomment" required=""></textarea>
                        </div>
                        <div class="d-sm-flex">
                                <input type="hidden" class="commentId" name="user"
                                       id="contactusername" value="">
                        </div>
                        <button type="submit" href="#formUsers"
                                class="mt-3 btn btn-success btn-block py-3" onclick="sendComments('{{ user.username }}')">
                            Отправить
                        </button>
                    </form>
        {% endif %}
        {% if user.is_anonymous %}
            Для того, чтобы оставить комментарий, необходимо авторизоваться.
        {% endif %}
    </div>
    <h3>Комментарии</h3>
    <div class="wrap-comments">
        <ul class="list-comments">
            <li class="full-comment">
                {% for comments in news.get_comments %}
                    <div class="comment" style="border: 1px solid grey; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; padding: 5px; margin-bottom: 10px;">
                        <img src="{% static 'images/L27JNotRkk8.png' %}" style="border-radius: 100%; width: 3%;">
                        <h5 id="formUsers"> {{ comments.user }} <font size="2"> {{ comments.date }} {{ comments.time }} </font> </h5>
                        <p>{{ comments.text }}</p>
                        <a href="#formComments" onclick="addComments('{{ comments.name }}', '{{ comments.id }}')">Ответить</a>
                    </div>
                    {% for comment in comments.comments_set.all %}
                        <img src="{% static 'images/answer-img.png' %}" style="width: 2%; position: relative; left: 5px;">
                        <div class="comment-answer" style="position: relative; left: 50px; border: 1px solid grey; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; padding: 5px; margin-bottom: 10px;">
                            <img src="{% static 'images/L27JNotRkk8.png' %}" style="border-radius: 100%; width: 2%;">
                            <h5>{{ comment.user }} <font size="2"> {{ comment.date }} {{ comment.time }} </font> </h5>
                            <p>{{ comment.text }}</p>
                            <a href="#formComments" onclick="addComments('{{ comments.name }}', '{{ comments.id }}')">Ответить</a>
                        </div>
                    {% endfor %}
                {% endfor %}
            </li>
        </ul>
    </div>
    <script>
    function addComments(name, id){
        document.getElementById('contactparent').value = id;
        document.getElementById('contactcomment').innerText = `${name}, `;
    }

    function sendComments(id){
        document.getElementById('contactusername').value = id;
    }

    </script>

{% endblock content %}

Буду благодарен за помощь, уже всю голову сломал.


Ответы (0 шт):