Django filtering 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请求应该是从web服务器检索数据。

最新更新