Почему comment_set не является атрибутом проекта?
Вот у меня есть модели Article и Comment(первая это типо статьи,вторая это комменты к статьям),вот эти модели(файл models.py):
class Article(models.Model):
article_title = models.CharField("название статьи",max_length = 60)
article_text = models.TextField("текст статьи",max_length = 3000)
pub_date = models.DateTimeField("дата публикации")
def __str__(self):
return self.article_title
def date(self):
return self.pub_date >= (timezone.now() - datetime.timedelta(days = 1))
class Meta:
verbose_name = 'Статья'
verbose_name_plural = 'Статьи'
#Комменты к статьям
class Comment(models.Model):
article = models.ForeignKey(Article, on_delete = models.CASCADE)
author_name = models.CharField("имя автора ", max_length = 50)
comment_text = models.CharField("текст комментария", max_length = 500)
def __str__(self):
return self.author_name
class Meta:
verbose_name = 'Комментарий'
verbose_name_plural = 'Комментарии'
Вот urls приложения:
path('<int:article_id>/', views.detail, name = 'detail'),
path('<int:article_id>/add_comment/', views.add_comment, name = 'add_comment'),
А вот иx views.py
#Для отображения Статей
def detail(request,article_id):
try:
a = Article.objects.get(id = article_id)
except:
raise Http404('Статьи не найдены')
test2 = a.comment_set.order_by('-id')[:10]
return render(request,'articles/detail.html',{'article': a, 'test2': test2})
#Для отображения Комментов
def add_comment(request,article_id):
try:
a = Article.objects.get(id = article_id)
except:
raise Http404('Статьи не найдены')
a.comment_set.create(author_name = request.POST['name'],comment_text = request.POST['text'])
return HttpResponseRedirect(reverse ('articles:detail', args = (a.id,)))
А вот шаблон detai.html в котором отображаются статьи и комменты:
<h1 id = article_title>{{article.article_title}}</h1>
<h2 id = article_text>{{article.article_text}}</h2>
<em id = article_pubdate>{{article.pub_date}}</em>
<!--ОТОБРАЖЕНИЕ КОММЕНТОВ-->
{% if test2 %}
{% for c in test2 %}
<p>
<strong id = name_comment>{{c.author_name}}</strong>
<p id = comment_text_article>{{c.comment_text}}</p>
{% endfor %}
</p>
{% else %}
<h2 id = 'comment_notfound_text'>Комментарии не найдены,станьте первым :)</h2>
{% endif %}
<!--КНОПКИ ОТПРАВКИ КОММЕНТОВ-->
<form action="{% url 'articles:add_comment' article.id %}" method="POST">
{% csrf_token %}
<input id = 'input_name' type = 'text' required placeholder="Введите имя", name = 'name'><br><br>
<textarea name="text" required placeholder="Текст комментария" id="input_comment_text" cols="30" rows="10"></textarea><br><br>
<button id = 'input_button' type = 'submit'>Добавить комментарий</button>
</form>
ТОЕСТЬ ВСЕ КОММЕНТЫ ОТОБРАЖАЮТСЯ И ДОБАВЛЯЮТСЯ НОРМАЛЬНО
Так вот,а теперь про ошибку... Я создал 2 модели(они похожи на предыдущие модели) - Chat и Chat_text_add( я хотел сделать чат на сайте с добавлением комментов) При добавлении коммента выскакивает ошибка что типо у обьекта Chat нет атрибута comment_set,почему его нету?И как это исправить? Вот модели(models.py)
#Чат
class Chat(models.Model):
title_chat = models.CharField("Название чата",max_length = 60)
chat_text = models.TextField("Описание чата", max_length = 500)
def __str__(self):
return self.title_chat
class Meta:
verbose_name = 'Чат'
#Добавление комментов к чату
class Chat_text_add(models.Model):
article = models.ForeignKey(Chat, on_delete = models.CASCADE)
author_name = models.CharField("имя автора ", max_length = 30)
comment_text = models.TextField("текст комментария", max_length = 500)
def __str__ (self):
return self.author_name
class Meta:
verbose_name = 'Добавление комментов к чату'
Вот еще urls приложения:
path('<int:article_id_chat>',views.chat1,name = 'chat1'),
path('<int:article_id_chat>/AddComment_inChat',views.AddComment_inChat,name = 'AddComment_inChat')
Вот views.py :
def chat1(request,article_id_chat):
try:
b = Chat.objects.get(id = article_id_chat)
except:
raise Http404('Комменты в чате не найдены')
test3 = b.comment_set.order_by('-id')[:10]
return render(request,'articles/detail2.html',{'b': b,'title':'Заголовок','test3':test3})
def AddComment_inChat(request,article_id_chat):
try:
b = Chat.objects.get(id = article_id_chat)
except:
raise Http404('Комменты в чате не найдены')
b.comment_set.create(author_name = request.POST['name'],comment_text = request.POST['text'])
return HttpResponseRedirect(reverse ('articles:detail2', args = (b.id,)))
И вот шаблон для отображения чата (detail2.html):
<h1 id = article_title>{{b.title_chat}}</h1>
<h2 id = article_text>{{b.chat_text}}</h2>
{% if test3 %}
{% for i in test3 %}
<p>
<strong id = name_comment>{{i.author_name}}</strong>
<p id = comment_text_article>{{i.comment_text}}</p>
{% endfor %}
</p>
{% else %}
<h2 id = 'comment_notfound_text'>Комментарии не найдены,станьте первым :)</h2>
{% endif %}
<!--КНОПКИ ОТПРАВКИ КОММЕНТОВ-->
<form action="{% url 'articles:AddComment_inChat' b.id %}" method="POST">
{% csrf_token %}
<input id = 'input_name' type = 'text' required placeholder="Введите имя", name = 'name'><br><br>
<textarea name="text" required placeholder="Текст комментария" id="input_comment_text" cols="30" rows="10"></textarea><br><br>
<button id = 'input_button' type = 'submit'>Добавить комментарий</button>
</form>
VIEWS (новое)
def detail2(request):
try:
b = Chat.objects.get(id = 1)
except:
raise Http404('Статьи не найдены')
test3 = b.chat_text_add_set.order_by('-id')[:10]
return render (request,'articles/detail2.html',{'b': b,'test3': test3})
def ChatTextAdd(request):
try:
b = Chat.objects.get(id = 1)
except:
raise Http404('Статьи не найдены')
b.comment_set.create(author_name = request.POST['name'],comment_text = request.POST['text'])
return HttpResponseRedirect(reverse ('articles:detail2', args = (b.id,)))
МОДЕЛИ:
class Chat(models.Model):
title_chat = models.CharField("Название чата",max_length = 60)
def __str__(self):
return self.title_chat
class Meta:
verbose_name = 'Чат'
class ChatTextAdd(models.Model):
article = models.ForeignKey(Chat, on_delete = models.CASCADE)
author_name = models.CharField("имя автора ", max_length = 50)
comment_text = models.CharField("текст комментария", max_length = 500)
def __str__(self):
return self.author_name
class Meta:
verbose_name = 'Комменты к чату'
Ответы (1 шт):
У экземпляра класса Chat (b) нету связанной модели Comment, по этой причине, b.comment_set не выводит комментарии!
models.py:
class Chat(models.Model):
title_chat = models.CharField("Название чата",max_length = 60)
chat_text = models.TextField("Описание чата", max_length = 500)
def __str__(self):
return self.title_chat
class Meta:
verbose_name = 'Чат'
#Добавление комментов к чату
class ChatTextAdd(models.Model):
article = models.ForeignKey(Chat, on_delete = models.CASCADE)
author_name = models.CharField("имя автора ", max_length = 30)
comment_text = models.TextField("текст комментария", max_length = 500)
def __str__ (self):
return self.author_name
class Meta:
verbose_name = 'Добавление комментов к чату'
views.py:
b.chattextadd_set.order_by('-id')[:10]