这是视图:
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请求应该是从web服务器检索数据。