我一直在纠结一些事情,我认为这是我的一个愚蠢的疏忽。我有一个表单,它向一个视图提供一个输入,该视图查询我拥有的一些SQL表,并返回一个列表,其中包含来自每个表**的列。
奇怪的是我的名单上出现了
<QuerySet{[ ]}>
每个列表对象周围的括号。有人能告诉我怎么避免这个吗?
非常感谢。
**我使用这个列表来组合这些表,而不是使用外键,因为我很难使用SQLAlchemy和Postgres来正确填充我的SQL数据库,而且我读到其中存在已知的问题,所以我放弃了这个方法。
视图.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import *
from .forms import QuoteForm, RfqForm
def bom_result(request):
if request.method == 'POST':
form = RfqForm(request.POST)
if form.is_valid():
bom_list = []
rfq = {}
rfq_search = form.cleaned_data['rfq_entered']
rfq['rfq_num'] = rfq_search
rfq['bom'] = Quotereq.objects.values('bom_entered').filter(rfq_num__exact=rfq_search)
rfq['part_num'] = Bom.objects.values('partnum').filter(bom__exact='07-00-000019')
bom_list.append(rfq)
context = {'bom_list': bom_list}
return render(request, 'quote/result.html', context)
else:
return HttpResponse("<h1>Something Went Wrong</h1>")
else:
form = RfqForm()
context = {'form': form}
return render(request, 'quote/lookup.html', context)
result.html结果
{% extends "base.html" %}
{% load static %}
{% block title %}{{title}}{% endblock title %}
{% block sidenav %}
{% for page in page_list %}
<li>
<a href="{{page.permalink}}">{{page.title}}</a>
</li>
{% endfor %}
{% endblock sidenav %}
{% block content %}
{% autoescape off %}
{{ content }}
{% endautoescape %}
{% if bom_list %}
{% for bom in bom_list %}
<table>
<tr>
<th><h1>RFQ Number</h1></th>
<th><h1>BOM</h1></th>
</tr>
<tr>
<td>
<ul style="list-style-type:none">
<li>{{ bom.rfq_num }}</li>
</ul>
</td>
<td>
<ul style="list-style-type:none">
<li>{{ bom.bom }}</li>
</ul>
</td>
<td>
<ul style="list-style-type:none">
<li>{{ bom.part_num }}</li>
</ul>
</td>
</tr>
</table>
{% endfor %}
{% else %}
<p>No Matching RFQ in Database</p>
{% endif %}
{% endblock content %}
下面是表格的输出:
最佳答案
如果我们看看part_num
是什么,我们会看到:
rfq['part_num'] = Bom.objects.values('partnum').filter(bom__exact='07-00-000019')
这是一个
QuerySet
,一个QuerySet
是导致一组对象的某种查询。您可以通过使用Django ORM(您在这里所做的)来构造这样的QuerySet
s。为了获得
QuerySet
中的元素,您可以遍历这些元素,例如单独处理这些元素。例如,我们可以在模板中编写:
<td>
<ul style="list-style-type:none">
<li>{% for part in bom.part_num %} {{ part.part_num }} {% endfor %}</li>
</ul>
</td>
因此,我们遍历
QuerySet
,然后每次都获得一个字典(包装在QuerySet
中),并呈现对应于字典中'part_num'
键的值。当然,我们可以使它更加复杂(例如,使用HTML标记指令,比如{% for part in bom.part_num %} <b>{{ part.part_num }}</b> {% endfor %}
将其放在黑体字中。我使用这个列表来组合这些表,而不是使用外键,因为我很难使用SQLAlchemy和Postgres来正确填充我的SQL数据库,而且我读到其中存在已知的问题,所以我放弃了这个方法。
我建议使用
ForeignKey
s,ManyToManyField
s等来表示实体之间的关系。Django不仅允许您进行更具表现力的查询,还将向数据库添加约束,以便与ForeignKey
相对应的列始终指向它们所指向的表的主键等。例如,如果您删除引用的实体,则可以定义触发器执行的操作(删除相关对象,将外键列设置为NULL
,等等)。也许遵循Django tutorial可以提供一些继续操作所需的信息。当然,你可以按照自己喜欢的方式设计和实施项目,但我个人的经验是,最终可能会带来更多的麻烦。
关于python - django“<QuerySet {[]}”出现在列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52448660/