Django фильтрация ForeignKey

Это мнение:

def post(self, request):
    author_request = request.data.get("author")
    queryset = Book.objects.filter(author=author_request)
    serializer = BookSerializer(queryset, None)
    return Response(serializer.data, HTTP_200_OK)

Это модель:

class Author(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
full_name = models.CharField(max_length=255, null=True, blank=True)
about = models.TextField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

def __str__(self):
    return self.full_name

class Meta:
    verbose_name = 'Author'
    verbose_name_plural = 'Authors'

Когда я пытаюсь отфильтровать книги по автору, я получаю ошибку. Ошибка говорит мне, что данные POST, которые я ввел, а это "Aleksa Petrovic" - имя автора, существующее в базе данных, не является UUID. Поэтому, когда я фильтрую книгу, она фильтруется по UUID, а я хочу, чтобы она фильтровалась по "full_name"

.

Вы можете .filter(…) [Django-doc] с:

Book.objects.filter(author__full_name=name_of_author)

Можно использовать двойное подчеркивание (__) для поиска " сквозных" отношений.

Таким образом, вид выглядит следующим образом:

def post(self, request):
    author_request = request.data.get('author')
    queryset = Book.objects.filter(author__full_name=author_request)
    serializer = BookSerializer(queryset, None)
    return Response(serializer.data, HTTP_200_OK)

Обычно поиск с фильтром обрабатывается не POST-запросом, а GET-запросом, поскольку GET-запрос предназначен для получения данных с веб-сервера.

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