Django | Страница не найдена (404) Ни один автомобиль не соответствует заданному запросу

Я пытался создать форму для создания новой статьи на сайте, но вылезла эта ошибка. Я перепроверил все 10 раз, но не понимаю в чем ошибка.

hello/urls.py :

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='hello'),
    path("cars/<slug:car_slug>/", views.car_slug, name='car_slug'),
    path('cars/addpost/', views.addpost, name='addpost')

]

hello/views.py :

from django.shortcuts import get_object_or_404, render, redirect
from .models import *
from .forms import *

def index(request):
    data = {}
    return render(request, 'hello/index.html', data)



def car_slug(request, car_slug):
    car = get_object_or_404(Cars, slug=car_slug)
    data = {
        'car': car
    }
    return render(request, 'hello/car_pk.html', data)

def addpost(request):
    if request.method == 'POST':
        form = AddPostForm(request.POST)
        if form.is_valid():
            Cars.objects.create(**form.cleaned_data)
            return redirect("hello")
        else:
            form.add_error(None, "Ошибка добавления поста")

    else:
        form = AddPostForm()


    data = {
        'form': form,
        'title': 'Добавление поста'
    }

    return render(request, 'hello/addpost.html', data)

hello/forms.py:

from django import forms

from .models import *

class AddPostForm(forms.Form):
    title = forms.CharField(label='Название', max_length=300)
    slug = forms.SlugField(label='URL', max_length=40)
    content = forms.CharField(label='Характеристика', widget=forms.Textarea(attrs={'cols':60, 
'rows': 10}))
    is_published = forms.BooleanField(label='Состояние', required=False, initial=True)
    brand = forms.ModelChoiceField(queryset=Brands.objects.all(), label="Бренды", 
empty_label='Не выбрано')

hello/models.py :

from django.urls import reverse
from django.db import models



class Cars(models.Model):
    title = models.CharField(max_length=255, verbose_name="Название")
    slug = models.SlugField(verbose_name="URL", unique=True, db_index=True, max_length=255)
    content = models.TextField(verbose_name="Характеристика", null=True)
    time_create = models.DateField(verbose_name='Дата публикации', auto_now_add=True)
    is_published = models.BooleanField(default=True )
    brand = models.ForeignKey('Brands', on_delete=models.PROTECT)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('car_slug', kwargs={'car_slug': self.slug})

    class Meta:
        verbose_name = 'Машины'
        verbose_name_plural = 'Машины'


class Brands(models.Model):
    name = models.CharField(verbose_name="Бренды", max_length=250)
    slug = models.SlugField(verbose_name="URL", unique=True, db_index=True, max_length=255)


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Бренды"
        verbose_name_plural = 'Бренды'

Here is a photo from the error:enter image description here Atsukatsup tszcdlpoyzshchayusz aytsoashchoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaoyzhaojl aofyadlafyadlofyadlafyadlafyadlafyadlafyadlafyadl laoofyadlafyadlofyadlafyadlfovyadlfovyadlfvfovyadlfovyadlfov

>>

Появляется ли он в оболочке? python manage.py shell

from hello.models import Cars
Cars.objects.filter(slug='insert_car_slug').first()

# if above is empty run this:
for i in Cars.objects.all():
    print('slug:', i.slug)

Я думаю, что проблема может быть в том, что поле slug Url... потому что оно валидируется как полный Url. При переходе к этому представлению вы передаете ему только addpost, что не будет полным Url ... возможно, просто измените это поле на CharField


и в addpost View, внутри form.is_valid(), это может выглядеть так:

if form.is_valid():
    form.save()
    return redirect("hello")

Возможно, лучше сделать так, чтобы формы были в Forms & представления были в Views.

Используйте этот код и проверьте

def car_slug(request, car_slug):
    car = Cars.object.filter(slug=car_slug)
    data = {
        'car': car
    }
    return render(request, 'hello/car_pk.html', data)

покажите нам ошибку с вашего терминала

Попробуйте проверить еще раз с ASCII символами slug.

Похоже, вы генерируете некоторые символы Unicode, которые не будут работать с django slug https://docs.djangoproject.com/en/4.1/topics/http/urls/#path-converters.

Согласно их документам

slug - Сопоставляет любую строку slug, состоящую из ASCII букв или цифр, плюс символы дефиса и подчеркивания. Например, building-your-1st-django-site.

.

Для того, чтобы работать с Unicode slug, измените путь к маршрутизатору на:

path(r'cars/(?P<slug>[^/.]+)/', views.car_slug, name='car_slug'),

Дополните regex-часть [^/.]+, если вам нужно что-то еще для проверки пути.

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