【问题标题】:Django: Model.objects.filter() returns an empty QuerysetDjango:Model.objects.filter() 返回一个空的查询集
【发布时间】:2021-06-06 04:02:59
【问题描述】:

我在我的 web 应用程序中使用 Django 作为后端。我的数据库中有一些数据,我可以使用 objects.get() 方法很好地查询。

 volumes = Volume.objects.get(volumeEngTitle="If there is a volume Title")

这会在 Postman 中返回以下值:

{
    "volumeNumber": 8.1
    "chapterNumber": 12
    "Translated": True
}

但我需要返回多个具有相同标题的卷。这就是为什么我尝试使用 filter() 但 Postman 中 Http.Get 的结果总是一个空集,例如 {}。 filter() 似乎永远找不到任何与 volumeEngTitle 匹配的实例,即使它存在。

这是返回音量的整个函数。

from rest_framework.response import Response
from .serializers import VolumeSerializer
from ..volumeModel import Volume

@api_view(['GET'])
def getVolume(request):

    volumes = Volume.objects.filter(volumeEngTitle="If there is a volume Title")
    #This works like a charm but only for a single instance:
    #volumes = Volume.objects.get(volumeEngTitle="If there is a volume Title")
    serializer = VolumeSerializer(volumes)
    return Response(serializer.data)

此方法的结果始终为 {}。即使它适用于 get() 方法。 我知道 get() 用于单个返回值,而 filter() 为我提供了一个具有多个值的查询集。但我不明白为什么过滤器根本不返回任何东西。 我需要为 filter() 指定任何内容吗?

编辑: VolumeSerializer 看起来像这样:

from rest_framework import serializers
from ..volumeModel import Volume

class VolumeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Volume
        fields = ['mangaVolumeNumber', 'chapterNumber', 'Translated']

【问题讨论】:

  • 你的序列化器是什么样的?
  • 如果您想要多个条目,请添加到序列化程序 many=True
  • 我已经编辑了帖子以包含 VolumeSerializer。
  • + 过滤器下的打印卷 它返回什么?
  • 正是 many=True 解决了这个问题。感谢您的帮助!

标签: python django django-models


【解决方案1】:

我认为您需要将many=True 添加到您的序列化程序中:

serializer = VolumeSerializer(volumes, many=True)

Serializer.__init__ 方法需要一个模型实例,而不是查询集。

【讨论】:

  • 解决了问题,谢谢!我只是从未见过,但现在很有意义。
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 2018-12-01
  • 2021-11-30
  • 2018-06-09
  • 1970-01-01
  • 2022-10-22
  • 2017-12-01
相关资源
最近更新 更多