繁体   English   中英

姜戈"

[英]django "<QuerySet{[ ]}" appearing in list

我一直在努力解决我认为是我的愚蠢疏忽的事情。 我有一个表单将输入提供给一个视图,该视图查询我拥有的一些 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)

结果.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

为了获取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对应的列将始终指向它们所指向的表的主键等。例如,如果您删除引用的实体,您可以定义触发器做什么(删除相关对象,将外键 columnn 设置为NULL等)。 也许遵循Django 教程可以提供一些必要的信息来继续。

当然你可以按照你喜欢的方式自由设计和实现项目,但我个人的经验是,它最终可能会导致更多的麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM