Я делаю простой блог прямо сейчас.
Я пытаюсь перенаправить страницу после создания поста.
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. Но я не знаю как.
Я искал это и пытался по-разному, но это все равно не работает.
Я хочу получить идентификатор сообщения и перенаправить на эта ссылка.