Django перенаправление на страницу сведений после создания поста (FBV) - PullRequest
0 голосов
/ 12 апреля 2020

Я делаю простой блог прямо сейчас.

Я пытаюсь перенаправить страницу после создания поста.

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. Но я не знаю как.

Я искал это и пытался по-разному, но это все равно не работает.

Я хочу получить идентификатор сообщения и перенаправить на эта ссылка.

1 Ответ

0 голосов
/ 12 апреля 2020

Ваше create_freeboard_view представление имеет обязательный аргумент pk, однако в URL, указывающем на него, отсутствует этот аргумент. Вы можете обновить URL-адрес до чего-то вроде ...

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

... чтобы захватить этот аргумент pk в URL-адресе.

Дополнительная информация в документы: https://docs.djangoproject.com/en/dev/ref/urls/#path

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...