django“ <queryset {[]}” =“”现身=“ =” in =“” list =“”

时间:2018-09-21 17:39:36

标签: python sql django postgresql

=“”

我一直在努力我认为这是我的骨干疏忽。我有一个表单,该表单将输入输入到查询我拥有的某些SQL表的视图中,并返回一个包含每个表中的列的列表**。

正在发生的奇怪的事情是我的列表显示为

      this.requestInformation = function() {
          return $http({
              method: 'GET',
              url: 'Your url'
          }).then(function (response) {
              console.log(response.status)
              return response; 
          })
      }
每个列表对象周围的

括号。谁能告诉我如何避免这种情况?

非常感谢。

**我正在使用此列表而不是ForeignKeys来组合这些表,因为我花了很长时间才能使用SQLAlchemy和Postgres正确地填充我的SQL数据库,并读到它存在已知问题,所以我放弃了该方法。

views.py

<QuerySet{[ ]}>

result.html

 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)

这是该表输出的内容:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

这是QuerySetQuerySet是某种查询,会导致一组对象。您可以使用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 %}以粗体显示。

  

我使用此列表而不是ForeignKeys来组合这些表,因为我花了很长时间才使用SQLAlchemy和Postgres使我的SQL数据库正确填充,并且读到它存在已知问题,所以我放弃了该方法

我真的建议使用ForeignKeyManyToManyField等来表示实体之间的关系。 Django不仅允许您进行更具表达力的查询,而且还将向数据库添加约束,以便与ForeignKey对应的列将始终指向它们指向的表的主键,等等。例如,如果您删除引用的实体,则可以定义触发器的操作(删除相关对象,将外键columnn设置为NULL,等等)。也许遵循Django tutorial可以提供一些必要的信息以继续。

当然,您可以按照自己喜欢的方式自由设计和实施项目,但是我的个人经验是,最终可能会带来更多麻烦。