Комментарии к постам в 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 работал правильно, его необходимо изменить, как указано выше.

При тестировании в моей среде код, приведенный выше, не вызывает ошибок и работает так, как задумано.

Вернуться на верх