我最近接手了Django / Python项目的开发,并且正在研究如何修复系统中的特定错误。
有一个项目数据库,其中包含有关存储的每个项目的大量信息。在其中一个网页上,有一个按钮,单击该按钮将向页面添加新表单 - 该表单允许用户输入有关给定项目的新对象的一些详细信息。如果数据库中存在该项目的现有对象,则将显示“表”,每个现有对象的每一行都有一个表单,用户可以手动更新表单中的字段以更新每个对象的信息。数据库中的对象。他们还可以在'table'中添加一个新的'row'来创建一个要添加到该项目的新对象。
此页面由视图显示:
def current_ccis(request, budget_id):
"""
View the CCIs for the current budget
"""
budget = Budget.objects.select_related('project').get(id=budget_id)
project = budget.project
ccis = CciItem.objects.select_related('budget', 'budget__project', 'project_room', 'project_room__room').filter(budget_id=budget_id).order_by('project_room__order', 'created')
formset = CciItemFormset(queryset=ccis.exclude(name=None), form_kwargs={'project':project})
context = {
'ccis': ccis,
'project': project,
'budget': budget,
'formset': formset,
'widths': ['60px', '120px', '220px', '120px', '60px', '60px', '60px', '280px', '280px'],
}
return render(request, 'costing/ccis_current.html', context)
每个对象的form
的每个formset
中的第一个单元格显示对象的“类型”,并且每个其他单元格显示/存储与对象本身相关的其他信息。 / p>
在另一个网页上,会显示一个关于给定项目的报告,其中包含基于用户输入到视图current_ccis(request, budget_id)
此页面由视图显示:
def report_ccis(request, project_id):
""" CCI items styled for pdf """
project = Project.objects.get(id=project_id)
budget = get_current_budget(project_id)
cci_total_exc = budget.cci_total_exc_vat_final
cci_grouped_items = budget.cci_items.all().order_by('project_room', 'name')
context = {
'project': project,
'cci_total_exc': cci_total_exc,
'cci_grouped_items': cci_grouped_items,
'webview': 1,
}
try: context['current_budget'] = project.budget_versions.get(current_marker=1) #For option name/date on top of pdfs
except ObjectDoesNotExist: pass
if request.GET.get('stage') == 'pd':
""" Render post deposit homepage """
context['html'] = render_to_string('costing/report2_ccis.html', context)
context['active_tab'] = '4'
return render(request, 'costing/reports_post_deposit.html', context)
else:
""" Render pre deposit homepage """
context['html'] = render_to_string('costing/report_ccis.html', context)
context['active_tab'] = '5'
return render(request, 'costing/reports_pre_deposit.html', context)
并且报告当前以以下格式显示信息:
标题
项目ID
对象
detail detail
对象
detail
即。属于项目的对象列表,在“对象标题”下面是属于该对象的详细信息列表。
我在这里遇到的问题是,对于某些项目,“对象”名称都显示在每个“对象”下方列出了“详细信息”,但对于其他项目,详细信息未列在各自的'对象',而是全部列在一个'对象'下,标题为“无”......
我不明白,这就是为什么存在这种不一致的原因 - 为什么对于某些项目,“对象”名称显示在报告中,所有“详细信息”列在各自的“对象”下,但对于其他项目,所有'细节'都列在对象'无'......?
下任何人都有任何建议,为什么会这样?
修改
报告显示在HTML文件中:
(后存款):
{% block tabs %}
{% with 'Payment schedule,Agreed variations,Variations not yet finalised,Client choice items,Overview'|listify as tabs %}
{% for tab_name in tabs %}
{% with forloop.counter as tab %}
{% if not tab == active_tab|add:0 %}<a class="tab" href="{% url 'costing:report2_tabbed' project.id %}?tab={{tab}}">{% else %}<a class="active tab">{% endif %}{{tab_name}}</a>
{% endwith %}
{% endfor %}
{% endwith %}
{% endblock tabs %}
(预存款):
{% block tabs %}
{% with 'Overview, Construction budget, Schedule of works, Client choice items'|listify as tabs %}
{% for tab_name in tabs %}
{% with forloop.counter as tab %}
{% if not tab == active_tab|add:0 %}<a class="tab" href="{% url 'costing:report_tabbed' project.id %}?tab={{tab}}">{% else %}<a class="active tab">{% endif %}{{tab_name}}</a>
{% endwith %}
{% endfor %}
{% endwith %}
{% endblock tabs %}
修改
此HTML来自的文件都来自同一HTML文件(reports_tabbed.html),该文件包含以下HTML:
{% extends "base.html" %}
{% load staticfiles utilities %}
{% block head_extras %}
<link rel="stylesheet" type="text/css" href="{% static "moon/scss/pdf-reports.css" %}">
{% endblock head_extras %}
{% block page_options %}
{% if request.user.first_name in 'Becky,Duncan'|listify and project.deposit_received %}
<a href="{% url 'costing:pdf2_master' project.id %}?quick-pdf=1" target="_blank">Make quick PDF</a>
{% endif %}
{% endblock page_options %}
{% block content %}
<div class="tabbed m-r-lg text-sm">
<div class="navbar tabbed text-sm">
{% block tabs %}
{% endblock tabs %}
</div>
<div class="tabbed-section border {% block tabbed_class %}page{% endblock tabbed_class %}">
{{html}}
</div>
</div>
{% endblock content %}
{% block content_scripts %}
{% endblock content_scripts %}