@nurzhannogerbek

Как правильно переписать FBV на CBV в Django?

Здравствуйте! Помогите пожалуйста разобраться с Class Based View.

Как взять определенный объект в CBV? У меня есть рабочий Function Based View. Пытаюсь переписать его на CBV, но не укладывается в голове некоторые места. К примеру в FBV ты указываешь в аргументах pk и затем уже берешь конкретный объект по этому первичному ключу book = get_object_or_404(Book, pk=pk). Как это реализовать в CBV? Помогите пожалуйста разобраться. Буду благадарен любой помощи!

FBV:
def book_delete(request, pk):
    book = get_object_or_404(Book, pk=pk)
    data = dict()
    if request.method == 'POST':
        book.delete()
        data['form_is_valid'] = True
        books = Book.objects.all()
        data['html_book_list'] = render_to_string('books.html', {
            'books': books
        })
    else:
        context = {'book': book}
        data['html_form'] = render_to_string('book_delete.html',
            context,
            request=request,
        )
    return JsonResponse(data)
  • Вопрос задан
  • 575 просмотров
Решения вопроса 1
@nurzhannogerbek Автор вопроса
CBV на указанный выше в статье FBV будет следующий:

views.py:
class BookDeleteView(View):
    def post(self, request, pk, *args, **kwargs):
        data = dict()
        book = Book.objects.get(pk=pk)
        book.delete()
        data['form_is_valid'] = True
        context = {
            'books': Book.objects.all()
        }
        data['html_books'] = render_to_string(
            'books.html',
            context
        )
        return JsonResponse(data)

    def get(self, request, pk, *args, **kwargs):
        data = dict()
        book = Book.objects.get(pk=pk)
        context = {
            'book': book
        }
        data['html_book_delete_form'] = render_to_string(
            'delete_book.html',
            context,
            request=request,
        )
        return JsonResponse(data)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы