我收到以下错误:
get()返回了多个清单-返回了2个!
我理解这是因为数据库中有多个具有相同值的记录,但是我想返回所有这些记录,因此我假设我需要使用.get以外的其他内容,但是我不确定是什么/
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行。数据库中有多个具有相同“引用”的记录,因此它们将不会打印。所以我的问题是2个部分:
1)如何更改manifest = z.get(reference = reference),以便可以访问多个记录
2)然后我该如何代替“ manifest.description”来访问这些记录
答案 0 :(得分:1)
get
期望返回具有所需条件的单个项目,否则(不超过一个)引发异常。如果要选择具有所需条件的任意数量的项目,则可以改用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)
然后,您可以使用点符号迭代选定的清单,并获取每个清单相关字段的值。
for manifest in manifest_queryset:
print(manifest.description)
您还可以使用values_list
获取描述列表。
description_list = manifest_queryset.values_list('description', flat=True)
您可以在QuerySet API reference中获得更多信息。
答案 1 :(得分:0)
要获取多个数据,可以使用 filter 属性。
BodyPublisher
答案 2 :(得分:0)
对于第一个问题,您可以使用| number | type |
|--------|------|
| 1 | A |
| 4 | A |
| 5 | A |
| 2 | B |
| 3 | B |
方法从模型中获取特定记录。
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()
作为参考,get()返回一个对象,如果在filter()返回空列表时未找到对象,则抛出异常。
答案 3 :(得分:0)
使用filter()
代替get()
。
但是过滤器返回的是 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
答案 4 :(得分:0)
要通过唯一字段获取特定项目,可以使用get
。如果找不到任何对象,将引发DoesNotExist
。
order = Orders.objects.get(pk=reference)
如果要使用对象列表,请使用filter
。如果找不到,将默认为[]
。
manifest = Manifest.objects.filter(reference=reference)