python - 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 请求应该从 Web 服务器检索数据。
推荐阅读
- php - 使用 php 更新值 JSON 文件
- java - 从 APK 文件中获取 Android Studio 项目
- elasticsearch - 弹性搜索 - 过滤复杂的逻辑查询
- python - 寻找一种有效的方法来找到多条线的截距/光流分析的消失点
- python - 将共享对象添加到 manager.Namespace
- javascript - 无限滚动 - 多次显示相同的广告单元
- android - 在图书馆项目中使用 Room DB
- html - 正则表达式匹配href中的特定位置
- angular - 如何通过非常简单的步骤在 Angular 5 中创建动态表单
- python - 任何人都可以帮助我有一个错误 NameError: name 'bgr_image' is not defined