Найти - Пользователи
Полная версия: Добавление даты комментария в блоге на DJANGO
Начало » Django » Добавление даты комментария в блоге на DJANGO
1
Gasplyak
У меня сделана модель комментария, html-форма добавления комментария к статье.

При добавлении комментария не отображается правильно дата и время его публикации, вместо нужной даты, просто пишется None. Поле даты коммента:

 comment_date = models.DateTimeField('время', default = timezone.now, null = True)

Я знаю, что это происходит из-за null = True, но без него я получаю ошибку при добавлении комментария. Параметр default не работает, ранее я пробовал различные вариации timezone.now, но к успеху это не привело. Я думал, что дело стоит в миграциях, но нет, я делаю все миграции верно и это не помогает.

Прикладываю полный код: models.py

 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 = 'Комментарии'

Далее views.py:

 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,)))

urls.py:

 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')

И html-код:
 {% 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 %}

Очень прошу помощи, только начал изучение джанги как сразу в лужу такую сел!
P.S. да, я гуглил и лазил по stackoverflow, и, нет, мне ничего не помогло.
m0nte-cr1st0
замени
 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')
)
Gasplyak
m0nte-cr1st0
замени
Спасибо большое, помогло, а то очень долго голову ломал и думал, что я неправильно делаю миграции…
Вы рекомендуете создание модели прямым обращение к объекту как здесь я так понял?
 Comment.objects.create(
    article = a,
    author_name = request.POST.get('name'), 
    comment_text = request.POST.get('text')
)
Просто читал, что мой подход конечно тоже подходит. И ещё такой тупой вопрос: В коде выше нет объявления поля с датой коммента, я так понял, что нет необходимости его использования как раз из-за атрибута auto_add_now в самой модели?
m0nte-cr1st0

Gasplyak
В коде выше нет объявления поля с датой коммента, я так понял, что нет необходимости его использования как раз из-за атрибута auto_add_now в самой модели
да, всё верно

Gasplyak
Просто читал, что мой подход конечно тоже подходит
Не знаю. Я с таким нигде не сталкивался просто. Поэтому написал, как знаю.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB