Запись в базе данных не обновляется а дублируется на джанго

Пишу сайт на джанго, хочу сделать функцию редактирования новостных статей в базе данных, но вместо обновления сайт добавляет измененную запись как новую, а старую не удаляет, хотя я делаю всё точно также как в туториале. Добавление статьи и динамический просмотр работают. Код в models:

from django.db import models


class Article(models.Model):
    header=models.CharField('Название', max_length=50)
    text=models.TextField('Текст', max_length=10000)
    dateTime=models.DateTimeField('Время и дата')
    def __str__(self):
        return self.header
    class Meta:
        verbose_name='Новость'
        verbose_name_plural='Новости'
    def get_absolute_url(self):
        return f'/{self.id}'

код в views:

from django.shortcuts import render, redirect
from .models import Article
from .forms import ArticleForm
from django.views.generic import DetailView, UpdateView

# Create your views here.

class NewsDetail(DetailView):
    model=Article
    template_name='newslist/detail.html'
    context_object_name = 'Article'

class NewsUptade(UpdateView):
    model=Article
    template_name = 'newslist/add.html'
    form_class = ArticleForm


def index(request):
    news=Article.objects.order_by('dateTime')
    return render(request, 'newslist/index.html', {'news':news})



def add(request):
    error=''
    if request.method=='POST':
        form=ArticleForm(request.POST)
        if form.is_valid():
            form.save()

            return redirect('main_page')
        else:
            error='Некорректные данные!'

    form=ArticleForm()
    data={'form':form, 'error':error}
    return render(request, 'newslist/add.html', data)

код в forms:

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

class ArticleForm(ModelForm):
    class Meta:
        model=Article
        fields=['header', 'text', 'dateTime']

        widgets={
            'header':TextInput(attrs={
                'class':'inputform inputname',
                'placeholder':'Название'
            }),
            'text':Textarea(attrs={
                'class':'inputform',
                'placeholder':'Текст'
            }),
            'dateTime': DateTimeInput(attrs={
                'class': 'inputform inputdate',
                'placeholder': 'Дата и время'
            })
        }

код в urls (в приложении):

from django.contrib import admin
from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.index, name='main_page'),
    path('/add', views.add, name='add'),
    path('<int:pk>', views.NewsDetail.as_view(), name='news-detail'),
    path('<int:pk>/uptade', views.NewsUptade.as_view(), name='news-uptade')
]

код в index.html:

{% extends 'newslist/layout.html' %}
{% block title %}


Новости


{% endblock %}





{% block body %}

<div class="container">
    {% for el in news %}
<div class="new">
    <h4 class="name">{{ el.header }}</h4><br>
    <p class="text">{{ el.text }}</p>
    <p class="dateTime">{{ el.dateTime }}</p>
    <a class="view-btn" href="{% url 'news-detail' el.id %}">Смотреть</a>
</div>
    {% endfor %}
    <a class="add" href="{% url 'add' %}">Добавить</a>
</div>


{% endblock %}

код в add.html:

{% extends 'newslist/layout.html' %}
{% block title %}


Добавить новость


{% endblock %}





{% block body %}

<div class="container">
    <form method="post" class="form" action="{% url 'add' %}">
        {% csrf_token %}
        {{ form.header }}<br>
        {{ form.text }}<br>
        {{ form.dateTime }}<br>
        <span>{{ error }}</span>
        <button type="submit" class="add addnew">Сохранить запись</button>
    </form>


</div>



{% endblock %}

код в шаблоне layout.html:


<!doctype html>
<html lang="en">
<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">
    <title>{% block title %}{% endblock %}</title>
    <style>
        body{
            background-color: rgb(136, 155, 168);
        }
        .container{
            background-color: rgb(209, 208, 255);
            margin-top: 20px;
            width: 70%;
            margin-left: auto;
            margin-right: auto;
            border-radius: 50px;
            padding-top: 40px;
            padding-bottom: 40px;
        }
        .new{
            border: 1px solid rgb(124, 124, 124);
            border-radius: 20px;
            margin-top: 40px;
            margin-bottom: 40px;
            width: 80%;
            margin-left: auto;
            margin-right: auto;
        }
        .name{
            font-size: 30px;
            text-align: center;
        }
        *{
            font-family:Arial;
            text-decoration: none;
        }
        .text{
            text-align: center;
        }
        .dateTime{
            margin-left: 20px;
        }
        .add{
            background-color: rgb(0, 0, 255);
            color: white;
            border-radius: 10px;
            padding: 20px;
            margin-left: 100px;
            transition: all 0.2s;
            border: 2px solid blue;
        }
        .add:hover{
            background-color: rgb(209, 208, 255);
            color:blue;
        }
        .form{
            width: 70%;
            margin-left: auto;
            margin-right: auto;
            text-align: center;
        }
        .inputform{
            border-radius: 20px;
            border: 2px solid blue;
            background-color: rgb(222, 222, 255);
            margin: 20px;
        }
        
        .addnew{
            margin: auto;
        }
        .inputname{
            width: 300px;
            height: 30px;
        }
        .inputdate{
            width: 300px;
            height: 30px;
        }
        .view-btn{
            padding: 10px;
            border-radius: 5px;
            background-color: rgb(70, 70, 70);
            color: white;
            transition: all 0.2s;
            border: 2px solid rgb(70, 70, 70);
            margin-left: 20px;
        }
        .view-btn:hover{            
            background-color: rgb(222, 222, 255);
            color: rgb(0, 0, 0);           
            border: 2px solid rgb(70, 70, 70);
        }
        </style>

    <script>

    </script>




</head>
<body>
    {% block body %}
    {% endblock %}
</body>
</html>
Вернуться на верх