我现在正在做简单的博客。
我试图在创建帖子后重定向页面。
models.py
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
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
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并重定向到那个链接。
发布于 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
https://stackoverflow.com/questions/61165862
复制相似问题