Задать вопрос
@koords

Как реализовать возможность добавления комментария к статье?

сделал сайт на котором можно добавлять статьи и хочу чтобы пользователи могли комментировать эти статьи
в models.py

from django.db import models


class Articles(models.Model):
    title = models.CharField("название", max_length=50)
    anons = models.CharField("анонс", max_length=250)
    full_text = models.TextField('текст')
    date = models.DateTimeField('время создания')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return f'/news/{self.id}'

    class Meta:
        verbose_name = 'новость'
        verbose_name_plural = 'новости'
в forms.py

from .models import Articles
from django.forms import ModelForm, TextInput, DateTimeInput, Textarea


class ArticlesForm(ModelForm):
    class Meta:
        model = Articles
        fields = ['title', 'anons', 'full_text', 'date']

        widgets = {
            'title': TextInput(attrs={
                'class': "form-control",
                'placeholder': "название статьи"
            }),
            'anons': TextInput(attrs={
                'class': "form-control",
                'placeholder': "анонс статьи"
            }),
            'full_text': Textarea(attrs={
                'class': "form-control",
                'placeholder': "текст"
            }),
            'date': DateTimeInput(attrs={
                'class': "form-control",
                'placeholder': "дата создания дд.мм.гггг"
            })
        }
в apps.py

from django.apps import AppConfig


class NewsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'news'
в admin.py

from django.contrib import admin
from .models import Articles

admin.site.register(Articles)
в news_home.html

{% extends 'main/layout.html' %}

{% block title %} новости {% endblock %}

{% block body %}
    <div class="features">
        <h1>новости</h1>
        {% if news %}
            {% for el in news %}
                <div class="alert alert-warning">
                    <h3>{{ el.title }}</h3>
                    <p>{{ el.anons }}</p>
                    <a href="{% url 'news-detail' el.id %}" class="btn btn-warning"> прочесть статью </a>
                </div>
        {% endfor %}
        {% else %}
            <p>у вас нет статьи</p>
        {% endif %}
    </div>
{% endblock %}
в details_viev.html

{% extends 'main/layout.html' %}

{% block title %}{{ article.title }}{% endblock %}

{% block body %}
    <div class="features">
        <h1>{{ article.title }}</h1>
        <p> {{ article.full_text }} </p>
        <p>{{ article.date }}</p>
        <a href="{% url 'news-delete' article.id %}" class="btn btn-danger">удалить</a>
        <a href="{% url 'news-update' article.id %}" class="btn btn-info">изменить</a>
    </div>
{% block body %}
в create.html

{% extends 'main/layout.html' %}

{% block title %} форма добавления статьи {% endblock %}

{% block body %}
    <div class="features">
        <h1>форма добавления статьи</h1>
        <form method="post">
            {% csrf_token %}
            {{ form.title }}<br>
            {{ form.anons }}<br>
            {{ form.full_text }}<br>
            {{ form.date }}<br>
            <span> {{ error }} </span>
            <button class="btn btn-btn-success" type="submit"> опубликовать статью </button>
        </form>
    </div>
{% endblock %}
в layout.html

{% load static %}
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="author" content="илья">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="{% static 'main/css/main.css' %}">
    <link href="//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
</head>
<body>
    <aside>
        <img src="{% static 'main/img/185102_receipt_shopping_icon.png' %}" alt="логотип">
        <span class="logo">mysite</span>
        <h3>меню</h3>
        <ul>
            <a href="{% url 'home' %}"><li><i class="fa fa-home" aria-hidden="true"></i> Главная</li></a>
            <a href="{% url 'about' %}"><li><i class="fa fa-book" aria-hidden="true"></i> Про нас</li></a>
            <a href="{% url 'news_home' %}"><li><i class="fa fa-paper-plane" aria-hidden="true"></i> новости</li></a>
            <a href="{% url 'contact' %}"><li><i class="fa fa-envelope" aria-hidden="true"></i> Контакты</li></a>
            <a href="{% url 'create' %}"><li><button class="btn btn-info"><i class="fas fa-plus circle"></i> добавить статью</button></li></a>
        </ul>
    </aside>
    <main>
        {% block body %}
        {% endblock %}
    </main>
</body>
</html>
  • Вопрос задан
  • 101 просмотр
Подписаться Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
AlexNest
@AlexNest
Работаю с Python/Django
Общая идея проста:
  1. Создать отдельную таблицу;
  2. Реализовать связь между таблицами;

Как это реализовать на практике описано в любом структурированном материале (учебник/цикл статей и т.д.) по:
  • Реляционными базам данных (описаны общие принципы)
  • Django (описано, как эти принципы реализованы во фреймворке)

Ответ написан
Комментировать
@robocop45
https://pocoz.gitbooks.io/django-v-primerah/conten...

здесь нормально описывают, хоть и немного всё устаревшие
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы