Django Get() 返回多个对象
Django Get() Returned More Than One Object
我收到以下错误:
get() returned 不止一个清单 -- 它 returned 2!
我知道这是因为数据库中有多个具有相同值的记录,但我想 return 所有这些记录,所以我假设我需要使用 .get 以外的东西,但我我不确定 what/how。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
y = Orders.objects.all()
z = Manifests.objects.all()
order = y.get(reference=reference)
manifest = z.get(reference=reference)
....
....
#Manifest
p.drawString(30,620,'MANIFEST: ')
p.drawString(30,605,manifest.description)
问题出在 manifest.description 行。数据库中有多个相同 "reference" 的记录,因此不会打印。所以我的问题分为两部分:
1) 如何更改 manifest = z.get(reference=reference) 以便我可以访问多个记录
2) 我怎样才能访问这些记录来代替 "manifest.description"
get
预期 returns 具有所需标准的单项 ,否则(不超过一个)引发异常。如果您想 select 任意数量的项目 符合所需的条件,您可以使用 filter
代替。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
manifest_queryset = Manifests.objects.filter(reference=reference)
order = Orders.objects.get(reference=reference)
然后您可以迭代 selected 清单并使用 点符号.
获取每个清单相关字段的值
for manifest in manifest_queryset:
print(manifest.description)
您还可以使用 values_list
.
获取描述列表
description_list = manifest_queryset.values_list('description', flat=True)
您可以在 QuerySet API reference 中获得更多信息。
要获取多个数据,您可以使用 过滤器 属性.
order = Orders.objects.all().filter(reference=reference)
manifest = Manifest.objects.all().filter(reference=reference)
对于您的第一个问题,您可以使用filter()
方法从您的模型中获取特定记录。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
manifest = Manifests.objects.filter(reference=reference)
order = Orders.objects.get(reference=reference)
对于您的第二个问题,filter()
returns a queryset.So 您可以通过遍历查询集或索引来访问数据。
for data in manifest:
print(data.description)
For your information get() returns an object and throws an exception if no object is found while filter() returns an empty list.
使用 filter()
而不是 get()
。
但是过滤器 returns queryset 而不是 object。所以你必须遍历查询集。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
y = Orders.objects.all()
z = Manifests.objects.all()
order = y.get(reference=reference)
manifest = z.filter(reference=reference)
for manifest_value in manifest:
print(manifest_value.description)
有关查询集的更多详细信息,请参阅QuerySet API
要通过唯一字段获取特定项目,您可以使用 get
。如果找不到对象,将引发 DoesNotExist
。
order = Orders.objects.get(pk=reference)
如果您想要对象列表,请使用 filter
。如果找不到,将默认为 []
。
manifest = Manifest.objects.filter(reference=reference)
我收到以下错误:
get() returned 不止一个清单 -- 它 returned 2!
我知道这是因为数据库中有多个具有相同值的记录,但我想 return 所有这些记录,所以我假设我需要使用 .get 以外的东西,但我我不确定 what/how。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
y = Orders.objects.all()
z = Manifests.objects.all()
order = y.get(reference=reference)
manifest = z.get(reference=reference)
....
....
#Manifest
p.drawString(30,620,'MANIFEST: ')
p.drawString(30,605,manifest.description)
问题出在 manifest.description 行。数据库中有多个相同 "reference" 的记录,因此不会打印。所以我的问题分为两部分:
1) 如何更改 manifest = z.get(reference=reference) 以便我可以访问多个记录
2) 我怎样才能访问这些记录来代替 "manifest.description"
get
预期 returns 具有所需标准的单项 ,否则(不超过一个)引发异常。如果您想 select 任意数量的项目 符合所需的条件,您可以使用 filter
代替。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
manifest_queryset = Manifests.objects.filter(reference=reference)
order = Orders.objects.get(reference=reference)
然后您可以迭代 selected 清单并使用 点符号.
获取每个清单相关字段的值for manifest in manifest_queryset:
print(manifest.description)
您还可以使用 values_list
.
description_list = manifest_queryset.values_list('description', flat=True)
您可以在 QuerySet API reference 中获得更多信息。
要获取多个数据,您可以使用 过滤器 属性.
order = Orders.objects.all().filter(reference=reference)
manifest = Manifest.objects.all().filter(reference=reference)
对于您的第一个问题,您可以使用filter()
方法从您的模型中获取特定记录。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
manifest = Manifests.objects.filter(reference=reference)
order = Orders.objects.get(reference=reference)
对于您的第二个问题,filter()
returns a queryset.So 您可以通过遍历查询集或索引来访问数据。
for data in manifest:
print(data.description)
For your information get() returns an object and throws an exception if no object is found while filter() returns an empty list.
使用 filter()
而不是 get()
。
但是过滤器 returns queryset 而不是 object。所以你必须遍历查询集。
def write_pdf_view(request):
if request.method == 'POST':
reference = request.POST.get('Reference_IDs')
y = Orders.objects.all()
z = Manifests.objects.all()
order = y.get(reference=reference)
manifest = z.filter(reference=reference)
for manifest_value in manifest:
print(manifest_value.description)
有关查询集的更多详细信息,请参阅QuerySet API
要通过唯一字段获取特定项目,您可以使用 get
。如果找不到对象,将引发 DoesNotExist
。
order = Orders.objects.get(pk=reference)
如果您想要对象列表,请使用 filter
。如果找不到,将默认为 []
。
manifest = Manifest.objects.filter(reference=reference)