Django需要从3个相关模型中透视数据
首先,请原谅我的英语,我是Django的新手,非常渴望学习。我已经用Python做了一年的事情了。这就是我的全部经验 我试图制作一个表格,在表格的一列中列出物品的列表,在其他列的顶部有一些卖家的名字,然后在每个卖家列中列出物品的价格以及他们各自的物品价格 我在models.py中有此代码Django需要从3个相关模型中透视数据,django,join,pivot,foreign-key-relationship,Django,Join,Pivot,Foreign Key Relationship,首先,请原谅我的英语,我是Django的新手,非常渴望学习。我已经用Python做了一年的事情了。这就是我的全部经验 我试图制作一个表格,在表格的一列中列出物品的列表,在其他列的顶部有一些卖家的名字,然后在每个卖家列中列出物品的价格以及他们各自的物品价格 我在models.py中有此代码 class Item(models.Model): name = models.CharField(max_length=200) class Seller(models.Model):
class Item(models.Model):
name = models.CharField(max_length=200)
class Seller(models.Model):
name = models.CharField(max_length=200)
class Price(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
price = models.CharField(max_length=10)
这是我的观点
def index(request):
all_items = Item.objects.all()
sellers = Seller.objects.all()
prices = Price.objects.all()
return render(request, 'juegos/index.html',
{'all_items': all_items,
'sellers': sellers,
'prices': prices}
)
在模板中,我有以下内容:
<table>
<thead>
<tr>
<th>Item</th>
{% for seller in sellers %}
<th>{{ seller.name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for item in all_items %}
<tr>
<td>{{ item.name }}</td>
<!--I don't know how to list each price for each seller-->
{% endfor %}
</tr>
</tbody>
</table>
项目
{卖方%中的卖方%}
{{seller.name}
{%endfor%}
{所有_项%中的项的百分比}
{{item.name}
{%endfor%}
这是如何显示信息的示例:
当我在管理员中添加价格时,我只是从先前添加的项目中选择项目,然后从我之前添加的卖家列表中选择卖家。
好像所有的东西都是相关的,但是我在做这个表的时候找不到把这些东西联系起来的方法
我尝试了很多东西,但我开始觉得我在尝试随机的东西,所以我来了
任何暗示都将不胜感激
编辑:我一直在想一个解决方案是在表头中迭代卖家名称,然后在表体中按照表头的顺序迭代每个项目的每个价格,但我不知道应该使用什么函数来做这件事。
<table>
<thead>
<tr>
<th>Item</th>
{% for seller in sellers %}
<th>{{ seller.name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for item in all_items %}
<tr>
<td>{{ item.name }}</td>
<!-- It would be cool if i could iterate trought sellers and just put the price like this:-->
{% for seller in sellers %}
{{ price }}
{% endfor %}
{% endfor %}
</tr>
</tbody>
</table>
项目
{卖方%中的卖方%}
{{seller.name}
{%endfor%}
{所有_项%中的项的百分比}
{{item.name}
{卖方%中的卖方%}
{{price}}
{%endfor%}
{%endfor%}
试试这个
{% for item in all_items %}
<tr>
<td>{{ item.name }}</td>
</tr>
{% for row in item.price_set.all %}
<tr>
<td>{{ row.price }}</td>
</tr>
{% endfor %}
{% endfor %}
{%for all_items%}
{{item.name}
{item.price_set.all%中的行的%
{{row.price}}
{%endfor%}
{%endfor%}
您只需要价格
{% for p in price %}
{{ p.item.neme }}
{{ p.seller.name }}
{{ p.price }} EUR
{% endfor %}
view.py
def index(request):
prices = Price.objects.all()
return render(request, 'juegos/index.html',
{'prices': prices}
)
当您循环进入价格时,您可以访问相关型号:
price.item.name
和price.seller.name
,谢谢您的回答。您能告诉我您将如何编写该循环吗?可能与Read aboutselect_related
和filter
重复。读。在关系/表格术语中,您显示的表是。谢谢,这是一些很好的信息,我正在阅读有关筛选器的信息。我不确定这是一种方式,请查看我的img示例。您好,谢谢您的回答,这个答案在显示部分是可以的,但由于某些原因,没有通过foreignkey将项目关联起来。它只是按照创建价格的顺序显示价格,但没有考虑该价格属于哪个卖家。。。