как исправить аргументы '{' pk '}' не найдено. Попробован 1 шаблон (ов): ['post / (? P <slug>[^ /] +) / $'] в PostDetailView - PullRequest
0 голосов
/ 26 мая 2019

Я использую slug в URL-адресе поста, но при отправке пост-обновления я получаю сообщение об ошибке

У меня есть эта ошибка в views.py return super (). Form_valid (form)

Реверс для 'postdetail' с аргументами ключевого слова '{' pk ': 2}' не найден.Попробовано 1 рисунков: ['post / (? P [^ /] +) / $']

models.py


class Post(models.Model):
    title = models.CharField(max_length=60)
    slug = models.SlugField(max_length=60, unique=True)
    first_image = models.ImageField(null=True, upload_to='post_image')
    content = RichTextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        super().save(*args,**kwargs)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('postdetail', kwargs={'pk': self.pk})

def post_slug(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug =  unique_slug_generator(instance)


pre_save.connect(post_slug, sender=Post)



views.py

.........

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title', 'first_image', 'content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

urls.py

from django.urls import path, include
from django.contrib.auth import views as auth_views
from .views import (
    PostListView,
    PostDetailView,
    PostCreateView,
    PostUpdateView,
    PostDeleteView,
    UserPostListView
)
from . import views

urlpatterns = [
......

    path('post/<slug>/update/', PostUpdateView.as_view(), name='postupdate'),
    path('post/<slug>/', PostDetailView.as_view(), name='postdetail'),

......
]

1 Ответ

0 голосов
/ 26 мая 2019

URL postdetail принимает только аргумент с именем slug.Пока вы передаете это pk.Очевидно, что это не удастся.

Измените это:

return reverse('postdetail', kwargs={'pk': self.pk})

на это:

return reverse('postdetail', kwargs={'slug': self.slug})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...