Frage

Ich habe ein paar Modellklassen mit grundlegenden Eins-zu-Viele-Beziehungen. Zum Beispiel hat ein Buch viele Rezepte und jedes Rezept hat viele Zutaten:

class Book(models.Model):
    name = models.CharField(max_length=64)

class Recipe(models.Model):
    book = models.ForeignKey(Book)
    name = models.CharField(max_length=64)

class Ingredient(models.Model):
    text = models.CharField(max_length=128)
    recipe = models.ForeignKey(Recipe)

Ich hätte gerne eine flache Liste aller Zutaten in allen Rezepten eines bestimmten Buches. Was ist der beste Weg, dies in Python auszudrücken?

Wenn ich Linq verwendet habe, könnte ich so etwas schreiben:

var allIngredients = from recipe in book.Recipes
                     from ingredient in recipe.Ingredients
                     select ingredient;
War es hilfreich?

Lösung

Eigentlich sieht es so aus, als ob es einen besseren Ansatz mit Filter gibt:

my_book = Book.objects.get(pk=1)
all_ingredients = Ingredient.objects.filter(recipe__book=my_book)

Andere Tipps

So drucken Sie jedes Rezept und seine Zutaten:

mybook = Book.objects.get(name="Jason's Cookbook")
for recipe in mybook.recipe_set.all():
    print recipe.name
    for ingredient in recipe.ingredients:
        print ingredient.text

Und wenn Sie nur eine Liste aller Zutatenobjekte erhalten möchten:

mybook = Book.objects.get(name="Jason's Cookbook")
ingredient_list = []
for recipe in mybook.recipe_set.all():
    for ingredient in recipe.ingredients:
        ingredient_list.append(ingredient)

Dokumentation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top