как я могу перенаправить пользователя на вновь созданный пост после создания нового поста - PullRequest
0 голосов
/ 04 августа 2020

Я хочу, чтобы пользователь был перенаправлен на недавно созданный пост. Я попытался добавить

return reverse("article-detail", args=(str(self.pk))), но он действительно работает. в командной строке написано `

django .urls.exceptions.NoReverseMatch: Обратный вариант для 'article-detail' с аргументами '(' 4 ',' 3 ')' не найден. Пробовал 1 шаблон (ы): ['article / (? P [0-9] +) $']

`

models.py

Class Post(models.Model):
    title = models.CharField(max_length=255)
    header_image = models.ImageField(null=True, blank=True, upload_to='images/')
    title_tag = models.CharField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    body = RichTextField(blank=True, null=True)
    # body = models.TextField()
    post_date = models.DateTimeField(auto_now_add=True)
    category = models.CharField(max_length=255, default='coding')
    snippet = models.CharField(max_length=255)
    likes = models.ManyToManyField(User, related_name='blog_post')

    def total_likes(self):
        return self.likes.count

    def __str__(self):
        return self.title + ' | ' + str(self.author)

    def get_absolute_url(self):
        return reverse("article-detail", args=(str(self.pk)))
        # return reverse("home")

urls.py

path('add_post/', AddPostView.as_view(), name="add_post"),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article-detail"),

views.py

class AddPostView(CreateView):
    model = Post
    form_class = PostForm
    template_name = 'add_post.html'

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Ваш метод get_absolute_url неверен, с обратным вы можете использовать kwargs для предоставления аргументов как dict или args как list . В вашем случае вы должны сделать это со списком, как я упоминал в комментариях выше.

def get_absolute_url(self):
    return reverse("article-detail", args=[self.pk])
0 голосов
/ 04 августа 2020

, почему бы не переписать абсолютный URL-адрес таким образом. Я предполагаю, потому что вы указываете идентификатор пути URL-адреса как int, и вы конвертируете его в str, чтобы получить абсолютный URL-адрес

def get_absolute_url(self):
    return reverse("article-detail", kwargs={pk:self.pk})
    
0 голосов
/ 04 августа 2020

в вашем классе addpostview вы можете указать свой успешный URL.

 `class AddPostView(CreateView):
    model=Post
    form_class=PostForm
    template_name='add_post.html'
    success_url='article/article_id/'`
    
...