【问题标题】:Display ManytoMany Django显示多对多 Django
【发布时间】:2021-03-27 10:25:00
【问题描述】:

试图显示与食谱相关的所有成分,但是:

我的模型:

class IngredientList(models.Model):
    name = models.CharField(max_length=100)

class RecipeList(models.Model):
    name = models.CharField(max_length=100)
    ingredients = models.ManyToManyField('IngredientList')
    instructions = models.TextField(max_length=400)
    amount = models.IntegerField()

我的观点:

from django.shortcuts import render
from .models import IngredientList, RecipeList


def index(request):
    ing = RecipeList.objects.all()
    context = {'ing': ing}
    return render(request, 'myrecipes/home.html', context)

我的模板:

<div class="card-body">
        <h4>{{ details.name}} <span class="badge badge-info">{{details.cuisine}}</span></h4>
        <p class="card-text">Ingredients: {{details.ingredients}}</p>
        <p class="card-text">Instructions: {{details.instructions}}</p>
        <p class="card-text">This makes {{ details.amount}} meals</p>
    </div>

我的输出是“myrecipes.IngredientList.None”

【问题讨论】:

  • {% for ingredient in details.ingredients.all %}{{ ingredient }}{% endfor %}

标签: python-3.x django django-views


【解决方案1】:

您需要访问ingredients 的查询集,因此details.ingredients.all,此外,您需要迭代这些成分,因此您可以使用:

{% for ingredient in details.ingredients.all %}
    {{ ingredient }}
{% endfor %}

在视图中,您可以通过一个额外的查询加载所有相关的Ingredients:

def index(request):
    ing = RecipeList.objects.prefetch_related('ingredients')
    return render(request, 'myrecipes/home.html', {'ing': ing})

这将避免进行额外的查询 per RecipeList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2013-08-09
    • 1970-01-01
    • 2011-04-14
    • 2021-06-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多