manytomany relation: extra field data _or_ related field data not reproduced?

0 views
Skip to first unread message

Hainje

unread,
Nov 4, 2009, 6:34:08 AM11/4/09
to Django users
LS.

I'm building a nut mix recept database:

class Ingredient(models.Model):
naam = models.CharField(max_length=30)

class MaatEenheid(models.Model):
naam = models.CharField(max_length=30)

class Recept(models.Model):
naam = models.CharField(max_length=30)
hoeveelheid = models.PositiveIntegerField(max_length=4)
maat = models.ForeignKey(MaatEenheid)
ingredient = models.ManyToManyField(Ingredient,
through='Verhouding')
bereiding = models.TextField(max_length=500)

class Verhouding(models.Model):
ingredient = models.ForeignKey(Ingredient)
recept = models.ForeignKey(Recept)
maat = models.ForeignKey(MaatEenheid)
hoeveelheid = models.PositiveIntegerField(max_length=4)
volgorde = models.PositiveIntegerField(max_length=2)

Now I want to create a preparation page with following data:

-Recepy name, (Recept.naam)
-Way of preparation (Recept.bereiding)
-amount produced by recept (Recept.hoeveelheid)
-Measuring unit of amount (Recept.maat)

and a list of ingredients:

-order of addition (Verhouding.volgorde)
-ingredient name (Verhouding.ingredient)
-ingredient amount (Verhouding.hoeveelheid)
-Measuring unit of amount (Recept.maat)

Selecting the data for te recept is no problem,
However getting the ingredient data is proving a pain.

My views.py:

def bereiding(request, gevraagd_recept):
lijst_recept = \
Recept.objects.select_related().filter( naam =
gevraagd_recept )
lijst_ingredient = \
Verhouding.objects.select_related('ingredient').filter( recept
= lijst_recept[0] )
naam_sjabloon = 'template_receptvieuw'
return render_to_response(naam_sjabloon + '.sbl', \
{ 'receptregel': lijst_recept, \
'ingredientregel': lijst_ingredient } )

Lijst Recept correctly contains all recept-specific data from the
Recept model.
ingredients are returned as a manyrelatedmanager.
This manyrelatedmanager _only_ returns ingredient names both when
executed
interactively and when implemented in a view/template

{% for regel in receptregel %}
{{regel.naam}}
{{regel.hoeveelheid}}
{{regel.maat}}
{% for ingredient in regel.ingredient.all %}
{{ingredient.volgorde}}:
{{ingredient.naam}}
{{ingredient.hoeveelheid}}
{{ingredient.maat}}
<br />
{% endfor %}
{% endfor %}

Ingredient amounts, measures and orders aren't returned.

When I use the manytomany table (lijst_ingredient) I _do_ get
the ingredient amounts, measures and orders but he ingredient names
are lost!

{% for ingredient_item in ingredientregel %}
{{ingredient_item.volgorde}}:
{{ingredient_item.naam}}
{{ingredient_item.hoeveelheid}}
{{ingredient_item.maat}}
<br />
{% endfor %}


What am i doing wrong??
Can I combine the ingredient names from lijst_recept with the
ingredient data from lijst_recept?

Regards, Marout
Reply all
Reply to author
Forward
0 new messages