Комментарии к постам в Django работают некорректно
Я пытаюсь создать систему для своего Django-проекта, которая позволяет пользователям оставлять комментарии к определенным сообщениям. Однако это не работает.
Я попытался ввести код в forms.py, views.py, urls.py и index.html для обработки записей в постах. Однако это привело к тому, что кнопка отправки на index.html не имеет полей ввода, и при ее нажатии страница перезагружается без обновления базы данных.
forms.py:
class PostCommentForm(forms.ModelForm):
class Meta:
model = PostComment
fields = ['post_comment']
views.py:
from .forms import PostCommentForm
from .models import *
def post_comment(request, post_id):
post = get_object_or_404(Post_Data, pk=post_id)
if request.method == 'POST':
form = PostCommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.post = post
comment.save()
return redirect('/', pk=post_id)
else:
form=PostCommentForm()
return render(request, 'index.html', {'form': form})
urls.py:
from .views import create_post
urlpatterns = [
path('post/<int:post_id>/comment/', views.post_comment, name='post_comment'),
]
index.html:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit Comment</button>
</form>
models.py:
class PostComment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post_Data, on_delete=models.CASCADE)
post_comment = models.CharField(max_length=500)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Comment by {self.user} on {self.post}"
Приведенный выше код работает, как и предполагалось, но ошибка возникает, если некоторые части не являются опечатками.
Во-первых, в urls.py была импортирована неизвестная функция create_post
from .views import post_comment
urlpatterns = [
path('post/<int:post_id>/comment/', post_comment, name='post_comment'),
]
Я модифицировал эту часть для импорта и использовал логику создания комментария, post_comment.
Следующая проблема - отступы в views.py .
from .forms import PostCommentForm
from .models import *
def post_comment(request, post_id):
post = get_object_or_404(Post_Data, pk=post_id)
if request.method == 'POST':
form = PostCommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.user = request.user
comment.post = post
comment.save()
return redirect('/', pk=post_id)
else:
form=PostCommentForm()
return render(request, 'index.html', {'form': form})
Для того чтобы post_comment работал правильно, его необходимо изменить, как указано выше.
При тестировании в моей среде код, приведенный выше, не вызывает ошибок и работает так, как задумано.