Django需要从3个相关模型中转移数据

时间:2017-07-11 20:16:31

标签: django join pivot foreign-key-relationship

首先,请原谅我的英语,我是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)

这是我的views.py

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>

这是如何显示信息的示例:

This is an example

当我在管理员中添加价格时,我只需从之前添加的商品中选择商品,然后从之前添加的卖家列表中选择卖家。 所以它就像一切都是相关的,但在制作这个表时我无法找到关联这些对象的方法。

我尝试了很多东西,但我开始觉得我在尝试随机的东西,所以我在这里。

任何提示都将受到赞赏。

编辑:我一直在想解决方案可能是在表格标题中迭代卖家名称,然后在表格主体中迭代每个项目的每个价格,按照标题交互的顺序,但我不知道我应该使用什么功能来执行此操作。

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

2 个答案:

答案 0 :(得分:0)

试试这个

{% 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 %}

答案 1 :(得分:0)

您只需要价格

{% 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}
    )