Форум сайта python.su
У меня сделана модель комментария, html-форма добавления комментария к статье.
При добавлении комментария не отображается правильно дата и время его публикации, вместо нужной даты, просто пишется None. Поле даты коммента:
comment_date = models.DateTimeField('время', default = timezone.now, null = True)
class Comment(models.Model): article = models.ForeignKey(Article, on_delete = models.CASCADE) # connecting 'Comment model' with 'Article model' by ForeignKey author_name = models.CharField('имя автора', max_length = 50) comment_text = models.CharField('текст комментария', max_length = 10000) comment_date = models.DateTimeField('время', default = timezone.now, null = True) def __str__(self): return self.author_name class Meta: verbose_name = 'Комментарий' verbose_name_plural = 'Комментарии'
def detail(request, article_id): try: a = Article.objects.get(id = article_id) except: raise Http404('Статья не найдена!') latest_comments_list = a.comment_set.order_by('-id')[:10] return render(request, 'articles/detail.html', {'article': a, 'latest_comments_list': latest_comments_list}) def leave_comment(request, article_id): try: a = Article.objects.get(id = article_id) except: raise Http404('Статья не найдена!') a.comment_set.create(author_name = request.POST.get('name'), comment_text = request.POST.get('text'), comment_date = request.POST.get('date')) return HttpResponseRedirect(reverse('articles:detail', args = (a.id,)))
urlpatterns = [ path('', views.index, name = 'index'), path('<int:article_id>/', views.detail, name = 'detail'), path('<int:article_id>/leave_comment/', views.leave_comment, name = 'leave_comment')
{% extends 'base.html' %} <!-->detail.html<--> {% block title %}{{article.article_title}}{% endblock %} {% block content %} <h2>{{article.article_title}}</h2> <p>{{article.article_text}}</p> <em>{{article.pub_date}}</em> {% if article.was_published_recently %} Новая статья! {% endif %} <hr> {% if latest_comments_list %} {% for c in latest_comments_list %} <p> <strong>{{c.author_name}}</strong> <p>{{c.comment_text}}</p> <strong>{{c.comment_date}}</strong> </p> {% endfor %} {% else %} Комментарии не найдены, станьте первым! {% endif %} <hr> <form action="{% url 'articles:leave_comment' article.id %}" method="POST"> {% csrf_token %} <input type="text" required placeholder="Ваше имя" name="name"><br> <textarea name="text" required="" placeholder="Текст комментария" cols="30" rows="10" width="100px" height="50px"></textarea><br> <strong name="date"></strong> <button type="submit">Оставить комментарий</button> </form> {% endblock %}
Офлайн
замени
default=timezone.now
auto_now_add=True
a.comment_set.create(author_name = request.POST.get('name'), comment_text = request.POST.get('text'), comment_date = request.POST.get('date'))
Comment.objects.create( article = a, author_name = request.POST.get('name'), comment_text = request.POST.get('text') )
Отредактировано m0nte-cr1st0 (Сен. 10, 2019 00:02:04)
Офлайн
m0nte-cr1st0Спасибо большое, помогло, а то очень долго голову ломал и думал, что я неправильно делаю миграции…
замени
Comment.objects.create( article = a, author_name = request.POST.get('name'), comment_text = request.POST.get('text') )
Отредактировано Gasplyak (Сен. 11, 2019 20:24:57)
Офлайн
Gasplyakда, всё верно
В коде выше нет объявления поля с датой коммента, я так понял, что нет необходимости его использования как раз из-за атрибута auto_add_now в самой модели
GasplyakНе знаю. Я с таким нигде не сталкивался просто. Поэтому написал, как знаю.
Просто читал, что мой подход конечно тоже подходит
Офлайн