我一直在纠结一些事情,我认为这是我的一个愚蠢的疏忽。我有一个表单,它向一个视图提供一个输入,该视图查询我拥有的一些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 %}

下面是表格的输出:
python - django“&lt;QuerySet {[]}”出现在列表中-LMLPHP

最佳答案

如果我们看看part_num是什么,我们会看到:

rfq['part_num'] = Bom.objects.values('partnum').filter(bom__exact='07-00-000019')

这是一个QuerySet,一个QuerySet是导致一组对象的某种查询。您可以通过使用Django ORM(您在这里所做的)来构造这样的QuerySets。
为了获得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数据库,而且我读到其中存在已知的问题,所以我放弃了这个方法。
我建议使用ForeignKeys,ManyToManyFields等来表示实体之间的关系。Django不仅允许您进行更具表现力的查询,还将向数据库添加约束,以便与ForeignKey相对应的列始终指向它们所指向的表的主键等。例如,如果您删除引用的实体,则可以定义触发器执行的操作(删除相关对象,将外键列设置为NULL,等等)。也许遵循Django tutorial可以提供一些继续操作所需的信息。
当然,你可以按照自己喜欢的方式设计和实施项目,但我个人的经验是,最终可能会带来更多的麻烦。

关于python - django“<QuerySet {[]}”出现在列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52448660/

10-16 11:51