如何解决在模板中对模型进行分组
| 我有两个相关模型:class Package(models.Model):
package_name = models.CharField(max_length=64)
ptype = models.CharField(max_length=16)
class Extra(models.Model):
package = models.ForeignKey(Package,related_name=\'package\')
data = models.DecimalField(max_digits=8,decimal_places=2,blank=True,null=True)
information = models.CharField(max_length=1024,blank=True)
view.py:
def show_package(request):
list = get_list_or_404(Package,ptype=\'sometype\')
return render(request,\'table.html\',{\'list\': list})
和模板:
{% for row in list %}
<table class=\"provider_list\">
<tr>
<td>{{ row.package_name}}</td>
<td>{{ row.ptype }}</td>
</tr>
</table>
{% endfor %}
如何在相关表旁边添加其他表(来自Extra模型)?
喜欢:
<table>
{% for extra_row in extra_list %}
<tr>
<td>{{ extra_row.data }}</td>
<td>{{ extra_row.information }}</td>
</tr>
{% endfor %}
</table>
谢谢。
解决方法
尝试这个:
{% for package in list %}
<table class=\"provider_list\">
<tr>
<td>{{ package.package_name}}</td>
<td>{{ package.ptype }}</td>
<td>
<!-- fetch the related data -->
<table>
{% for extra in package.extra_set.all %}
<tr>
<td>{{ extra.data }}</td>
<td>{{ extra.information }}</td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
{% endfor %}
, 您显示修改包ForeignKey上的Extra related_name。
models.py
class Extra(models.Model):
extra = models.ForeignKey(Package,related_name=\'extra_related_name\') #default for related_name would be \'extra_set\'
您可以通过以下方式访问所有其他字段:
临时演员= list.extra_related_name.all()
假设您在每个Package模型上都只有一个额外的组件
views.py
def show_package(request):
list = get_list_or_404(Package,ptype=\'sometype\')
list.extra = list.extra_related_name.all()[0]
return render(request,\'table.html\',{\'list\': list})
模板
{% for row in list %}
<table class=\"provider_list\">
<tr>
<td>{{ row.package_name}}</td>
<td>{{ row.ptype }}</td>
<td>{{ row.extra.data }}</td>
<td>{{ row.extra.information }}</td>
</tr>
</table>
{% endfor %}
如果您确定每个软件包最多包含一个额外的软件包,则应查看OneToOneField以便于访问。如果不确定,请坚持使用ForeignKey并在视图中添加检查以检查您是否正在访问有效数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。