Джанго " - PullRequest
       15

Джанго "

0 голосов
/ 21 сентября 2018

Я боролся с чем-то, что я считаю упущением с моей стороны.У меня есть форма, которая передает входные данные в представление, которое запрашивает некоторые таблицы SQL, которые у меня есть, и возвращает список обратно со столбцами из каждой таблицы **.

Странно, что мой список появляется с

<QuerySet{[ ]}>

скобки вокруг каждого объекта списка.Может кто-нибудь сказать мне, как этого избежать?

Очень признателен.

** Я использую этот список для объединения этих таблиц, а не ForeignKeys, потому что мне было ужасно сложно заставить мои базы данных SQLправильно заполнить с помощью SQLAlchemy и Postgres и прочитать, что с этим были известные проблемы, поэтому я отказался от этого метода.

views.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 %}

Вот что выводит таблица:

enter image description here

1 Ответ

0 голосов
/ 21 сентября 2018

Если мы посмотрим, что такое part_num, то увидим:

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

Это QuerySet, QuerySet - это какой-то запрос, который приводит к набору объектов.Вы создаете такие QuerySet s с помощью ORM Django (что вы здесь делаете).

Чтобы получить элементы в QuerySet, вы можете перебирать элементы и, например, обрабатывать их по отдельности..

В шаблоне мы можем, например, написать:

<td>
    <ul style="list-style-type:none">
        <li><b>{% for part in bom.part_num %} {{ part.part_num }} {% endfor %}</b></li>
    </ul>
</td>

Таким образом, мы перебираем QuerySet, затем каждый раз получаем словарь (который был заключен в QuerySetи мы отображаем значение, соответствующее ключу 'part_num' в словаре. Конечно, мы можем сделать его более сложным (например, использовать директивы разметки HTML, например, {% for part in bom.part_num %} <b>{{ part.part_num }}</b> {% endfor %}, чтобы выделить его жирным шрифтом.

Я использую этот список для объединения этих таблиц, а не ForeignKeys, потому что мне было ужасно сложно заставить свои базы данных SQL правильно заполняться с использованием SQLAlchemy и Postgres и прочитать, что с этим были известные проблемы, поэтому я отказался от этого метода.

Я бы действительно посоветовал использовать ForeignKey s, ManyToManyField s и т. Д. Для представления отношений между сущностями. Django не только позволитчтобы сделать более выразительные запросы, он также добавит ограничения в базу данных, так что столбцы, которые соответствуют ForeignKey, всегда будут указывать на первичный ключ таблицы, на которую они указывают, и т. д. В случае, если вы, например, удалите упомянутыйсубъект, вы можете определить триггеры, что делать (удалить связанные объекты, установить столбец внешнего ключа в NULL и т. д.)Возможно, следуя инструкции Django , вы сможете получить некоторую необходимую информацию для продолжения.

Конечно, вы можете разрабатывать и реализовывать проект так, как вам нравится, но мой личный опыт заключается в том, что он будетвероятно, в конечном итоге приведет к большим неприятностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...