Каждый раз, когда я пытаюсь обновить или создать сообщение в создаваемом блоге, эта ошибка всегда выскакивает, она сохраняет информацию, но не перенаправляет страницу на URL-адрес, на который я ее отправляю. Вот код, чтобы вы, ребята, могли его проверить.
Models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from datetime import datetime, date
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length= 255)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length= 255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
post_date = models.DateField(auto_now_add=True)
category = models.CharField(max_length=255, default = 'coding')
def __str__(self):
return self.title + ' | ' + str(self.author)
def get_absolute_url(self):
return reverse('app1:article-detail', args =(str(self.id)))
views.py
from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.urls import reverse, reverse_lazy
from .forms import PostForm, PostUpdateForm
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post, Category
# Create your views here.
def index(request):
return render(request, 'app1/index.html')
class PostView(ListView):
model = Post
template_name = 'app1/post.html'
ordering = ['post_date']
class ArticleDetailView(DetailView):
model = Post
template_name = 'app1/article_details.html'
class AddPostView(CreateView):
model = Post
form_class = PostForm
template_name = 'app1/createpost.html'
success_url = reverse_lazy('app1:article-detail')
#fields = '__all__'
class UpdatePostView(UpdateView):
model = Post
form_class = PostUpdateForm
template_name = 'app1/update_post.html'
class DeletePostView(DeleteView):
model = Post
template_name = 'app1/delete_post.html'
success_url = reverse_lazy('index')
class AddCategoryView(CreateView):
model = Category
template_name = 'app1/add_category.html'
fields = '__all__'
success_url = reverse_lazy('app1:Post')
urls.py
from django.urls import path
from app1 import views
from .views import PostView, ArticleDetailView, AddPostView, UpdatePostView, DeletePostView, AddCategoryView
app_name = 'app1'
urlpatterns = [
path('post/', PostView.as_view(), name = 'Post'),
path('article/<int:pk>', ArticleDetailView.as_view(), name = 'article-detail'),
path('add_post/',AddPostView.as_view(), name='addpost'),
path('update_post/<int:pk>', UpdatePostView.as_view(), name = 'updatepost'),
path('delete_post/<int:pk>', DeletePostView.as_view(), name = 'deletepost'),
path('add_category/', AddCategoryView.as_view(), name = 'add_category')
]
urls.py
from django.contrib import admin
from django.urls import path, include
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name = "index"),
path('app1/', include('app1.urls')),
path('members/', include('django.contrib.auth.urls')),
path('members/', include('members.urls'))
]
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Post, Category
#choices = [('coding', 'coding'), ('sports', 'sports'), ('entertainment', 'entertainment')]
choices = Category.objects.all().values_list('name', 'name')
choice_list = []
for item in choices:
choice_list.append(item)
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'author','category', 'body')
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title', 'length':'100px'}),
'author': forms.Select(attrs={'class': 'form-control'}),
'category': forms.Select(choices = choice_list,attrs={'class': 'form-control', 'placeholder': 'Choices'}),
'body': forms.Textarea(attrs={'class': 'form-control'})
}
class PostUpdateForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'body')
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title'}),
'body': forms.Textarea(attrs={'class': 'form-control'})
}
Ошибка:
NoReverseMatch в / app1 / add_post / Reverse для 'article-detail' с никаких аргументов не найдено. Пробовали 1 шаблон (ы): ['app1 / article / (? P [0-9] +) $'] Метод запроса: URL-адрес запроса POST: http://127.0.0.1: 8000 / app1 / add_post / Django Версия: 3.0.3 Тип исключения: NoReverseMatch Значение исключения: Обратный вариант для «детали статьи» без аргументов не найдено. Пробовали 1 шаблон (ы): ['app1 / article / (? P [0-9] +) $'] Местоположение исключения: C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib \ site-packages \ django \ urls \ resolvers.py в _reverse_with_prefix, строка 677 Python Исполняемый файл: C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ python .exe Python Версия: 3.8.3 Python Путь: ['C: \ Users \ snin2 \ Desktop \ basura \ lapagina', 'C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ python38.zip', 'C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ DLLs ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv ',' C: \ Users \ snin2 \ anaconda3 \ envs \ MyDjangoEnv \ lib \ site-packages '] Время сервера: понедельник, 3 августа 2020 г. 20:53:37 + 0000
Я не уверен, почему я получаю эту ошибку так как я использую обратную функцию.