@Adam_Loginov

Почему django не сохраняет комментарии?

Помогите пожалуйста, при добавлении комментариев страница обновляется но комментарии не сохраняются в базу , причем если делать через shell то все отлично сохраняется. Не понимаю в чем проблема.

models.py
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 = 200)

	def __str__(self):
		return self.author_name

url.py
app_name = 'base'
urlpatterns = [
	path('', views.index, name = 'index'),	
	path('article/', views.article, name = 'article'),
	path('article/<int:article_id>/', views.articles, name = 'articles'),
	path('article/<int:article_id>/leave_comment/', views.leave_comment, name = 'leave_comment'),
	path('promo/<int:article_id>/', views.promo, name = 'promo'),
	path('article/<int:article_id>/leave_comment/', views.leave_comment, name = 'leave_comment')
]


views.py
def articles (request,article_id):
	articles = Article.objects.get(id = article_id)

	comment_list = articles.comment_set.all()
	return render(request,'index/news.html',{'articles':articles,'comment_list':comment_list})

def leave_comment(request,article_id):
	a = Article.objects.get(id = article_id)
	
	a.comment_set.create(author_name = request.POST['name'], comment_text = request.POST['text'])

	return HttpResponseRedirect(reverse('index:news',args = (a.id)))


код шаблона news.html
<form actions="{% url 'base:leave_comment' articles.id %}" method = "post"> 
        {% csrf_token %}
        <input type="text" required placeholder = "Ваше имя" name ="name"><br>
        <textarea name="text" required="" placeholder = "текст " cols="30" rows = "10"></textarea><br>
        <button type = "submit">Оставить комментарий</button>
    </form>
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
tema_sun
@tema_sun
А можете тыкнуть меня в доукментацю, где написано, что Foreign Key объекты можно создать таким образом "a.comment_set.create(author_name = request.POST['name'], comment_text = request.POST['text'])" ?

def leave_comment(request,article_id):
    a = Article.objects.get(id = article_id)
    comment = Comment(article=a, author_name= ... , comment_text=...)
    comment.save()
    ....

Никогда не работайте с сырыми данными, типа request.POST['name'] или request.POST['text']. Создайте форму и валидируйте данные через нее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы