Python 追溯Django ForeignKey关系

Python 追溯Django ForeignKey关系,python,django,django-models,relational-database,Python,Django,Django Models,Relational Database,我有一个Django网站,在那里我想显示两个图形(Charta和 查特b)的股票清单,但我正在努力定义我的模型。赖特 现在,我的models.py中有多个相关表: from django.db import models class Stock(models.Model): name = models.CharField(max_length=100) company = models.CharField(max_length=100) def __unicode__

我有一个Django网站,在那里我想显示两个图形(Charta和 查特b)的股票清单,但我正在努力定义我的模型。赖特 现在,我的models.py中有多个相关表:

from django.db import models

class Stock(models.Model):
    name = models.CharField(max_length=100)
    company = models.CharField(max_length=100)

    def __unicode__(self):
      return self.name

class Charta(models.Model):
    stock = models.ForeignKey(Stock)
    x_axis = models.IntegerField(default=0)
    y_axis = models.IntegerField(default=0)

class Chartb(models.Model):
    stock = models.ForeignKey(Stock)
    x_axis = models.IntegerField(default=0)
    y_axis = models.IntegerField(default=0)
我的目标是创建一个股票页面,列出我的股票表中的所有股票,以及 然后是每个股票的详细信息页面,在这里我可以显示每个股票的x和y坐标 每张图表。(一旦我有了这些坐标,我就可以绘制它们,但现在我 (仅在屏幕上打印坐标)。到目前为止,我的观点是 文件如下所示:

from django.shortcuts import render, get_object_or_404
from stocks.models import Stock, Charta, Chartb

def index(request):
    stock_list = Stock.objects.all()
    context = {'stock_list': stock_list}
    return render(request, 'stocks/index.html', context)

def detail(request, stock_id):
    stock = get_object_or_404(Stock, pk=stock_id)
    return render(request, 'stocks/detail.html', {'stock': stock})
这样做,我可以很容易地得到一个显示所有股票的股票页面 在我的表格中,使用以下index.html将每个链接链接到详细信息页面 文件:


股票
{%if stock_list%}
    {存货清单%(存货百分比)}
  • {%endfor%}
{%else%} 没有存货

{%endif%}
我遇到的问题是在细节中显示每个股票的坐标 页我想要一个details.html页面,如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
    </head>
    <body>
    <h1>Stock Details</h1>

    <!-- This works fine -->
    <p>The name of this stock is <strong>{{ stock.name }}</strong> </p> <br>
    <p>This stock comes from <strong>{{ stock.company }}</strong> </p> <br>

    <!-- This doesn't work -->
    <p>The x values for this stock are: </p>
        <ul>
        {% for x_val in stock.charta.x_axis %}
            <li>x_val</li>
        {% endfor %}
        </ul>
    <p>The y values for this stock are: </p>
        <ul>
        {% for y_val in stock.charta.y_axis %}
            <li>y_val</li>
        {% endfor %}
        </ul>

    </body>
</html>

存货明细
该股票的名称为{{stock.name}


该股票来自{{stock.company}


该股票的x值为:

    {stock.charta.x_axis%}
  • 克休瓦尔
  • {%endfor%}
该股票的y值为:

    {库存中y_val的百分比。charta.y_axis%}
  • 尤瓦尔
  • {%endfor%}
但是,我不能用类似的方式调用x_值和y_值
stock.charta.x_轴
。有没有更好的方法来设置我的模型以便 我可以访问详细信息页面中每个股票的图表数据吗? 直觉上,对我来说,有一张列出股票的表格,然后 使用某种SQL连接访问每个图表的数据

我在github上提供了这个项目的一个最小示例


谢谢

在模板中调试非常困难,因为错误会被抑制!!在您的视图中调试要容易得多

def detail(request, stock_id):
    stock = get_object_or_404(Stock, pk=stock_id)
    import pdb; pdb.set_trace();
    return render(request, 'stocks/detail.html', {'stock': stock})
上述允许将程序暂停在import pdb语句处,并允许您检查库存对象

默认情况下,在django中,foreignkey通过
\u set
属性进行导航

stock.charta\u set
将返回管理器,而不是实际的图表实例。这样做应该是正确的

stock.charta\u set.all()

或者在模板中:


stock.charta\u set.all

在模板中调试非常困难,因为错误被抑制了!!在您的视图中调试要容易得多

def detail(request, stock_id):
    stock = get_object_or_404(Stock, pk=stock_id)
    import pdb; pdb.set_trace();
    return render(request, 'stocks/detail.html', {'stock': stock})
上述允许将程序暂停在import pdb语句处,并允许您检查库存对象

默认情况下,在django中,foreignkey通过
\u set
属性进行导航

stock.charta\u set
将返回管理器,而不是实际的图表实例。这样做应该是正确的

stock.charta\u set.all()

或者在模板中:


stock.charta\u set.所有的
charta
Chartb
都有
stock
ForeingKey
字段,因此当
stock
是一方时,您处理的是一对多的
关系

在代码中,您有:

{% for x_val in stock.charta.x_value %}
    <li>x_val</li>
{% endfor %}
请注意图表集的变化。这是因为Django默认情况下为关系生成
对象管理器
,称为
图表集
图表集

您可以修改模型,以便为
股票中的
charta
charb
对象指定“关系名称”

class Charta(Model):
    ...
    stock = models.ForeignKey(Stock, related_name='charta')
    ...
并将模板代码更改为:

{% for charta in stock.charta.all %}
    <li>{{ charta.x_axis }}</li>
{% endfor %}
{%用于库存中的charta.charta.all%}
  • {{charta.x_轴}
  • {%endfor%}
    Charta
    Chartb
    有一个
    ForeingKey
    字段
    Stock
    ,因此当
    Stock
    是一方时,您处理的是一对多的
    关系

    在代码中,您有:

    {% for x_val in stock.charta.x_value %}
        <li>x_val</li>
    {% endfor %}
    
    请注意图表集的变化。这是因为Django默认情况下为关系生成
    对象管理器
    ,称为
    图表集
    图表集

    您可以修改模型,以便为
    股票中的
    charta
    charb
    对象指定“关系名称”

    class Charta(Model):
        ...
        stock = models.ForeignKey(Stock, related_name='charta')
        ...
    
    并将模板代码更改为:

    {% for charta in stock.charta.all %}
        <li>{{ charta.x_axis }}</li>
    {% endfor %}
    
    {%用于库存中的charta.charta.all%}
    
  • {{charta.x_轴}
  • {%endfor%}
    您的意思是
    x\u值
    x\u轴
    <代码>y_值
    分别。@pythonishvili:啊,是的。谢谢,那是个打字错误。我已经编辑了这个问题——但是代码仍然不能处理这些更改。您的意思是
    x\u值
    x\u轴
    <代码>y_值
    分别。@pythonishvili:啊,是的。谢谢,那是个打字错误。我已经编辑了这个问题——虽然代码仍然不能处理这些更改。谢谢——这正是我想要的!我记得在教程中读到过关于_集属性的内容,但我想我从来没有完全掌握它。谢谢——这正是我想要的!我记得在教程中读到过关于_集属性的内容,但我想我从来没有完全掌握它。谢谢!这是有用的谢谢!这很有帮助