【发布时间】:2021-08-06 11:34:32
【问题描述】:
我最近开始研究Django,无法理解如何正确实现模板(表格) 我有一个模型: 她与公司和银行有联系。
class BankAccount(models.Model):
company = models.ForeignKey('Company.Company', null=True, on_delete=models.CASCADE, verbose_name='Фирма',
related_name='company')
bank = models.ForeignKey('Bank', null=True, on_delete=models.CASCADE, verbose_name='Банк', related_name='bank')
login_bank = models.CharField(max_length=255, verbose_name='Логин', null=False)
password_bank = models.CharField(max_length=255, verbose_name='Пароль', null=False)
date_created = models.DateTimeField(auto_now=True)
date_updated = models.DateTimeField(auto_now_add=True)
balance = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True)
在模板中,我想显示一个表格,其中所有公司/银行都将显示在这些列和行的交叉处,该模型的值将出现。 我一直在寻找答案 5 天,并且
| Company1 | Company2 | Company3 | Company4 | |
|---|---|---|---|---|
| Bank1 | Balance(Company1/Bank1) | Balance(Company2/Bank1) | Balance(Company/Bank1) | Balance(Company4/Bank1) |
| Bank2 | Balance(Company1/Bank2) | .... | .... | .... |
| Bank3 | Balance(Company1/Bank3) | .... | .... | .... |
我尝试了下面的示例模板,谢谢 @Linh Nguyen
<table class="table table-bordered">
<tr>
<th> </th>
{% for company in companies %}
<th>{{ company.name }}</th>
{% endfor %}
</tr>
{% for bank in banks %}
<tr>
<td>{{bank.name}} </td>
{% for company in companies %}
{% for account in bank_accounts %}
{% if account.company_id == company.id and bank.id == account.bank_id %}
<td>{{account}}</td>
{% endif %}
{% endfor %}
{% endfor %}
</tr>
{% endfor %}
</table>
context = {
'companies': Company.objects.all().order_by('id'),
'banks': Bank.objects.all().order_by('id'),
'bank_accounts': BankAccount.objects.all()
}
但结果仍然不理想。一家公司可以在账户表 (bank_account) 中有 2 个和 4 个账户。 如果公司没有全部4个帐户,则数据不再匹配。如果添加{% else%},则表格完全中断。 screen
<div class="col-md-12">
<div class="row">
<table class="table table-bordered">
<tr>
<th> </th>
{% for company in companies %}
<th>{{ company.name }}</th>
{% endfor %}
</tr>
{% for bank in banks %}
<tr>
<td>{{bank.name}} </td>
{% for company in companies %}
<td>
{% for account in bank_accounts %}
{% if account.company_id == company.id and bank.id == account.bank_id%}
{{account}}
{% endif %}
{% endfor %}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
</div>
终于成功了!
【问题讨论】:
-
看来你的if语句逻辑错误,请将
放在if条件之外 很遗憾,即使去掉这个IF语句,图片也没有任何变化(((我的意思不是删除 if 语句,如果你看一下我写的模板,td 标签在 if 之外,所以当它不匹配时,它会有一个空的 td跨度>如果你把td标签放在div里面如果不匹配td就不会生成,顺序当然是错误的我的 if 语句 if 相当于 {% if %}{{account}} {% else %}
标签: django django-models django-templates django-orm