logo
06.04.2011 23:16
1
Ahoj,

potreboval bych poradit, jak vypisu v template objekt z databaze.

Mam model
class Product(models.Model):
name = models.CharField(max_length=200)

class Variant(models.Model):
product = models.ForeignKey(Product)
size = models.CharField(max_length=10)


V template to vypisuji nasledovne


{% for prod in product_list %}
<NAME>{{ prod.nazev }}</NAME>
{% endfor %}

ale vubec netusim, jak mam vypsat vsechny velikosti pro dany produkt z tridy variant.
Muzete mi nekdo poradit?

Diky

Co se právě děje na Webtrhu?

06.04.2011 23:41
2
Kód:
{% for variant in product_list.variant_set.all %}
     <NAME>{{ variant.product.nazev }}</NAME>
     <SIZE>{{ variant.size }}</SIZE>
{% endfor %}
07.04.2011 09:04
3
Původně odeslal syntaxsugar
Kód:
{% for variant in product_list.variant_set.all %}
     <NAME>{{ variant.product.nazev }}</NAME>
     <SIZE>{{ variant.size }}</SIZE>
{% endfor %}
a nevypise to nahodou vsechny objekty typu Variant?
08.04.2011 13:38
4
Původně odeslal mallox
a nevypise to nahodou vsechny objekty typu Variant?
Ne, object_set() (Manager, který za tím sedí) sleduje vztahy 1:n / m:n v databázi.

Kód:
{% for variant in product_list.variant_set.all %}
     <NAME>{{ variant.product.nazev }}</NAME>
     <SIZE>{{ variant.size }}</SIZE>
{% endfor %}
Nejsem si jistý, ale product_list vůbec nemusí mít variant_set, spíš by bylo rozumnější (bez ohledu na vytížení databáze) dělat:
Kód:
{% for product in product_list %}
                  <NAME>{{ product.nazev }}</NAME>
                  {% for variant in product.variant_set.all %}
                         <SIZE>{{ variant.size }}</SIZE>
                   {% endfor %}
{% endfor %}
Někde v API je select_related () (+ pár dalších), ušetří ti pár desítek/stovek dotazů do db.