首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django在创建帖子后重定向到详细页(FBV)

Django在创建帖子后重定向到详细页(FBV)
EN

Stack Overflow用户
提问于 2020-04-12 09:45:44
回答 1查看 162关注 0票数 0

我现在正在做简单的博客。

我试图在创建帖子后重定向页面。

models.py

代码语言:javascript
复制
from django.db import models

from django.db.models.signals import post_delete
from django.conf import settings
from django.dispatch import receiver


class FreeBoardPost(models.Model):
    title = models.CharField(max_length=100, null=False, blank=False)
    content = models.TextField(max_length=5000, null=False, blank=False)
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    def __str__(self):
        return self.title


@receiver(post_delete, sender=FreeBoardPost)
def freeboard_image_delete(sender, instance, *args, **kwargs):
    instance.image.delete(False)

urls.py

代码语言:javascript
复制
from django.urls import path

from .views import FreeBoardListView, FreeBoardDetailView, create_freeboard_view

urlpatterns = [
    path("", FreeBoardListView.as_view(), name="freeboard"),
    path("<int:pk>/", FreeBoardDetailView.as_view(), name="freeboard_detail"),
    path("create/", create_freeboard_view, name="freeboard_create"),
]

views.py

代码语言:javascript
复制
from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import ListView, DetailView

from .models import FreeBoardPost
from .forms import CreateFreeBoardPost
from users.models import CustomUser


class FreeBoardListView(ListView):
    model = FreeBoardPost
    template_name = "bbs/freeboard/free_board.html"
    context_object_name = "free_board_list"

    def get_queryset(self):
        return FreeBoardPost.objects.order_by("-id")


class FreeBoardDetailView(DetailView):
    model = FreeBoardPost
    template_name = "bbs/freeboard/free_board_detail.html"


def create_freeboard_view(request, pk):
    post = get_object_or_404(FreeBoardPost, pk=pk)
    context = {}

    user = request.user
    if not user.is_authenticated:
        return redirect("login")

    form = CreateFreeBoardPost(request.POST or None)
    if form.is_valid():
        obj = form.save(commit=False)
        author = CustomUser.object.filter(email=user.email).first()
        obj.author = author
        obj.save()
        return redirect("freeboard_detail", pk=post.pk)

    context["form"] = form

    return render(request, "bbs/freeboard/free_board_create.html", context)

views.py代码给我一个错误的create_freeboard_view() missing 1 required positional argument: 'pk'

有什么方法可以在FBV上重定向吗?

如果不是,我想将此代码更改为CBV。但我不知道该怎么做。

我对此进行了搜索,并尝试了不同的方法,但仍然不起作用。

我想获得一个帖子的id并重定向到那个链接。

EN

回答 1

Stack Overflow用户

发布于 2020-04-12 13:48:55

您的create_freeboard_view视图有一个必需的参数pk,但是指向它的url缺少此参数。您可以将url更新为类似于...

path("create/<int:pk>/", create_freeboard_view, name="freeboard_create"),

...to在url中捕获此pk参数。

文档中有更多信息:https://docs.djangoproject.com/en/dev/ref/urls/#path

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61165862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档