Каков наилучший способ отправки значений полей для создания модели в URL в DRF?

У меня есть приложение с книгами, где я хочу иметь POST запрос со значением поля в URL, как

    POST URL:BOOKS/NINETEEN_EIGHTY_FOUR HTTP/1.1 content-type: application/json 
{
    "description": "my favorite book" 
}
    

    RESPONSE
{
    "description": "my favorite book",
    "book_name": "NINETEEN_EIGHTY_FOUR" 
}

Каким образом лучше всего это сделать в DRF? У меня есть модель книги с 2 полями: описание и название_книги

В моем views.py есть viewset (подключенный к router book), который работает с книгами: например, GET books/ вернет полный список книг и через декоратор @action я получаю GET/POST books/{book_name} запросы

class BookViewSet(ListViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    @action(methods=['get', 'post', ],
            detail=False,
            url_path=r'(?P<book_name>\w+)',)
    def get_or_create_book(self, request, book_name):
        if request.method == 'GET':
            book = get_object_or_404(Book, book_name=book_name)
            etc
        book, create = Book.objects.get_or_create(book_name=book_name)

Есть ли что-то лучшее?

Описанный вами подход - это правильный способ обработки POST-запросов со значениями полей в URL с помощью Django REST framework (DRF).

В приведенном вами примере вы используете декоратор @action для обработки GET и POST запросов для конкретной книги. Декоратор @action позволяет вам определить дополнительные действия для набора представлений, которые не охватываются стандартными операциями CRUD. Вы также используете параметр url_path, чтобы получить название книги из URL и передать его в качестве аргумента методу действия.

В методе действия get_or_create_book вы проверяете метод запроса, чтобы определить, следует ли получить существующую книгу или создать новую. Если метод запроса - GET, вы используете функцию get_object_or_404 для получения книги с указанным именем, а если метод запроса - POST, вы используете метод get_or_create для получения или создания книги с указанным именем.

Этот подход подходит для обработки простых случаев использования, но важно учитывать следующее:

Если вам нужно обрабатывать более сложные случаи и проверки, вы можете использовать пользовательские представления и наборы представлений. Возможно, вы захотите использовать метод create вместо get_or_create и обработать существующий случай книги с помощью пользовательской валидации. Возможно, вам стоит рассмотреть возможность обработки параметров URL на уровне маршрутизации, вы можете использовать преобразователи путей для получения значения из URL и передачи его в представление. В целом, описанный вами подход является хорошим способом обработки POST-запросов со значениями полей в URL, но вы должны рассмотреть ваш конкретный случай использования и скорректировать его при необходимости.

Вернуться на верх