0

Djangoアプリには2つのデータテーブルがあります。1つは出荷船の詳細を含み、もう1つは個々の船に関連するオファーを含みます。私のモデルは次のとおりです。

class Vessel(models.Model):
    name = models.CharField(max_length=64)
    image = models.CharField(max_length=64)
    vesseltype = models.ForeignKey(VesselType)
    capacity = models.IntegerField()
    length = models.FloatField()
    beam = models.FloatField()
    speed = models.IntegerField()
    activities = models.CharField(max_length=256)
    category = models.IntegerField()
    display_order = models.IntegerField()
    published = models.BooleanField()
    def __unicode__(self):
        return self.name

class Offer(models.Model):
    vessel = models.ForeignKey(Vessel)
    description = models.CharField(max_length=128)
    date = models.DateField()
    duration = models.IntegerField()
    itinerary = models.TextField()
    price = models.IntegerField()
    display_order = models.IntegerField()
    link = models.URLField()
    published = models.BooleanField()
    def __unicode__(self):
        return self.description

私のviews.pyには、次のコードがあります。

def home(request):
    vessels = Vessel.objects.filter(published='y').order_by('display_order')
    offers = Offer.objects.filter(vessel__published__exact='y').filter(published='y').order_by('display_order')
    t = loader.get_template('index.html')
    c = Context({
        'vessels' : vessels,
        'offers' : offers,
    })

テンプレートでは、それぞれが船舶名、船舶の詳細の一部、およびその船舶に関連するオファーの数を含む複数のdivを表示する必要があります。

オファーを各船舶にリンクしようとするクエリを確認しました。また、テンプレートのループコード内で船舶名を識別して、vessel.idとoffer.vesselが一致する場合にオファーを表示することも試みました。

これまでのところ、クエリ側でエラーが発生し、テンプレートを使用して船舶名とオファーのリストを分離するだけでは、何も成功していません。この情報を結合して、テンプレートで次のようなものを使用できるようにするにはどうすればよいですか。

for offer in offers:
    offer.vessel.name
    offer.vessel.category
    offer.description
    offer.price

または私はあまりにも期待していますか?数時間これにいて、ドキュメントで解決策を見つけることができませんが、それはおそらく明白です。クエリ、ビューコード、またはテンプレートを変更しても問題ありません。

4

1 に答える 1

0

The answer is to change your view code. You want a queryset like Offer.objects.all().select_related(). select_related will make sure you don't hit the database every time your loop executes because it will follow foreign keys to the end before executing a query.

You're also using the wrong template syntax. It needs to be something like:

{% for object in object_list %}
{{ object.attribute }}
{% endfor %}
于 2013-02-08T23:42:50.217 に答える