@Ornitier

Почему не удаётся отобразить форму на сайте?

Создал модель, создал форму в forms.py, сделал views и вставил всё в html, но на сайте отображается только кнопка. Я бы хотел сам решить этот вопрос, но не понимаю в каком месте у меня ошибка.
models.py:
from django.contrib.auth import get_user_model
from django.db import models


class Post(models.Model):
    title = models.CharField('Заголовок', max_length = 200)
    body = models.TextField('Текст')
    date = models.DateTimeField('Дата', auto_now_add = True)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
        )
        
    def __str__(self):
        return self.title

class Comment(models.Model):
    title = models.CharField('Заголовок', max_length=140)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment = models.TextField('Комментарий')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Комментарий'
        verbose_name_plural = 'Комментарии'


forms.py:
from django.forms import ModelForm
from .models import Comment

class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields = '__all__'


views.py:
from django.views.generic import ListView, DetailView
from django.shortcuts import render
from . import models, forms

class PostsView(ListView):
    model = models.Post
    template_name = "home.html"

class PostDetail(DetailView):
    model = models.Post
    template_name = "post_detail.html"

class CommentList(ListView):
    model = models.Comment
    template_name = "post_detail.html"

def newcomment(request):
    form = forms.CommentForm()
    return render(request, 'post_detail.html', {'form': form})


post_detail.html:
{% extends 'base.html' %}
{% block title %}
        <title>{{ post.title }}</title>
{% endblock title %}
{% block content %}
    <div>
        <h2>{{ post.title }}</h2><i>{{ post.date }}</i>
        <p>{{ post.body }}</p>
    </div>
<br>
    <div>
        <h2>Comments:</h2>
        {% if post.comments.all|length > 0 %}
            {% for comment in post.comments.all %}
                <h2>{{ comment.title }}</h2>
                <h3>{{ comment.author }}</h3><i>{{ comment.date }}</i>
                <p>{{ comment.comment }}</p>
        {% endfor %}
        {% else %}
            <h3>Comments don't exist</h3>
        {% endif %}
        <br>
            <h3>Добавить комментарий:</h3>
            <form method="POST">
                {% csrf_token %}
                {{ form }}
                <button type="submit">Добавить комментарий</button>
            </form>
    </div>
{% endblock content %}
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
AlexNest
@AlexNest
Работаю с Python/Django
Как минимум - нужно указывать, как именно выводить форму
UPD. Собственно, у вас форма будет выводится только в newcomment, в то время как остальные два класса не будут знать про нее. И да, раз уж у вас комментарии и пост в одном шаблоне, может, ну не знаю, использовать одно представление для них?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
milssky
@milssky
Координатор племени фиолетовых обезьянок
В urls не забыли прокинуть запрос до вью функции нужной?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы