Django需要从3个相关模型中透视数据

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):

首先,请原谅我的英语,我是Django的新手,非常渴望学习。我已经用Python做了一年的事情了。这就是我的全部经验

我试图制作一个表格,在表格的一列中列出物品的列表,在其他列的顶部有一些卖家的名字,然后在每个卖家列中列出物品的价格以及他们各自的物品价格

我在models.py中有此代码

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 about
select_related
filter
重复。读。在关系/表格术语中,您显示的表是。谢谢,这是一些很好的信息,我正在阅读有关筛选器的信息。我不确定这是一种方式,请查看我的img示例。您好,谢谢您的回答,这个答案在显示部分是可以的,但由于某些原因,没有通过foreignkey将项目关联起来。它只是按照创建价格的顺序显示价格,但没有考虑该价格属于哪个卖家。。。