ForeignKey的。如何获取数据?

时间:2013-02-19 16:10:38

标签: django

class Property(models.Model):
    title = models.CharField(max_length=255)

class CurrentPrice(models.Model):
    current = models.ForeignKey(Current)
    prop = models.ForeignKey(Property)
    price = models.DecimalField(max_digits=5, decimal_places=2)

class Current(models.Model):
    name = models.CharField(max_length=20)

views.py:

...
p = Property.objects.all()
return render_to_response('index.html',{'p':p},context_instance=RequestContext(request))

如何获取price的{​​{1}}并将其显示在我的模板中?

模板:

Property

3 个答案:

答案 0 :(得分:1)

我不确定你的目的/模型设计是什么,从你所展示的内容看起来不合适。

每个CurrentPrice对象会有很多Property个,所以在模板中你可以做的是

{% for item in p %}
    {{ item.title }}
    {% for cp in item.currentprice_set.all %}
        {{ cp.price }}
    {% endfor %}
{% endfor %}

答案 1 :(得分:1)

如果Property可以有多个CurrentPrice对象(默认情况下是这样):

{% for item in p %}
    {{ item.title }}
    {% for current_price in item.currentprice_set.all %}
        {{ current_price.price }}
    {% endofor %}
{% endfor %}

如果只有一个(但在这种情况下最好使用o2​​o字段而不是FK字段,那么你可以防止多个CurrentPrice记录指向同一个属性):

{% for item in p %}
    {{ item.title }}
    {{ item.currentprice_set.get.price }}
{% endfor %}

答案 2 :(得分:0)

我认为你要做的就是下面的事情。

class Property(models.Model):
    title = models.CharField(max_length=255)

    @property
    def current_price(self):
        # The current price is the last price that was given.
        if self.pricing_history.count() > 0:
            return self.pricing_history.order_by('-when')[0].amount
        return None

class Price(models.Model):
    prop = models.ForeignKey(Property, related_name='pricing_history')
    amount = models.DecimalField(max_digits=5, decimal_places=2)
    when = models.DateTimeField(auto_now_add=True)
模板中的

示例:

{% for item in p %}
    {{ item.title }}
    {{ item.current_price }}
{% endfor %}