我正在使用django编写订单队列系统,我已经能够弄清楚如何从HTML表单获取输入并使用模型和表单将其存储到sqlite数据库中。要将数据库中的数据读入列表,我会做类似的事情
queueList = Order.objects.filter(orderDate__isnull=True)
({{queueList}}的html输出)
其中Order是具有多个属性的模型。返回的数据看起来像这样。
[<Order: Name: Bob, Catalog #: 32, Vendor: vendor1, Site: Site1, Entered: 2011-06-06, Ordered: None, Received: None, Ordered By: orderee1>, <Order: Name: Jeff, Catalog #: 333, Vendor: vendor2, Site: site2, Entered: 2011-06-06, Ordered: None, Received: None, Ordered By: orderee2>]
感觉django中会有一些简单的内容将格式化为HTML表,有点像form.as_table。有没有简单的方法来做到这一点?我需要显示3个表,首先打印出没有orderDate的每个字典项,第二个是orderDate但没有receiveDate的每个项,第三个是包含所有receivedDates的表。我是否必须实际删除所有这些数据以构建表格?我在网上找到了一些尝试过类似东西的人的代码,但它却抛出了异常,对我来说太复杂了。
答案 0 :(得分:10)
这听起来像是可以使用Django templating language轻松解决的问题。
因此,在您的html模板文件中,您可以使用以下内容:
<table summary="no_orderDate">
<tr><th>Column 1</th><th>Column 2</th>
{% for queue in queueList %}
{% if not queue.orderDate %}
<tr><td>{{ queue.name }}</td><td>{{ queue.catalog_num }}</td></tr>
{% endif %}
{% endfor %}
</table>
你可能需要检查一些语法,但是你明白了。
答案 1 :(得分:2)
如果我理解正确你想要将所有字段转储出来而不必像ZincX的答案那样写输出?如果是这样你可以做类似下面的事情,只需简单地这样做就意味着你失去了对输出的控制。
# in models.py Order class
def get_fields(self):
return [(field, field.value_to_string(self)) for field in Order._meta.fields]
# in template
<table>
{% for queue in queueList %}
{% for field, value in queue.get_fields %}
<tr>
<th>{{ field }}</th>
<td>{{ value }}</td>
</tr>
{% endfor %}
{% endfor %}
</table>