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-запрос предназначен для получения данных с веб-сервера.