我有两个型号,看起来像这样:

class EventDrink(models.Model):
    name = models.CharField(max_length=255)
    drink_active = models.BooleanField()

    def __str__(self):
        return self.name


class EventIngredient(models.Model):
    drink = models.ManyToManyField(EventDrink)
    name = models.CharField(max_length=255)
    url = models.URLField()

    def __str__(self):
        return self.name

我现在想要显示将drink_active设置为True的所有饮料,以在我的视图中显示.我还想展示与该饮料相关的配料. 我知道我可以像这样过滤我眼中的饮料:

drinks = EventDrink.objects.filter(drink_active=1)

但我现在如何显示与每种饮料相关的配料?

推荐答案

您可以通过以下方式访问相关内容:

my_drink.eventingredient_set.all()

这将触发获取相关EventIngredient的查询.如果我们必须为几杯wine 这样做,那效率不是很高.我们可以在一个额外的查询中使用.prefetch_related(…) [Django-doc]来批处理所有这些请求,因此:

drinks = EventDrink.objects.filter(drink_active=True).prefetch_related(
    'eventingredient_set'
)

例如,我们可以列举这些饮料及其配料:

for drink in drinks:
    print(drink.name)
    for ingredient in drink.eventingredient_set.all():
        print(f' - {ingredient.name}')
    print()

Django相关问答推荐

如何创建为模型创建信号的Djangodecorator ?

管理器不能通过对象上的对象实例访问.保存()

Django mods.py我想要一个函数转到一个变量

__init__()获取了意外的关键字参数';id';

如何将数据库中的 None 序列化为空对象?

在 Django 的 TextField 中禁用 HTML 转义

如何在django中生成临时文件然后销毁

OrderingFilter 没有属性filter_queryset

使用 sqlite 运行 django 测试

在 django 中是否有生成 settings.SECRET_KEY 的功能?

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

Django unique=True 不工作

我应该如何在我的模型中使用 DurationField?

如何在 Django 中测试自定义模板标签?

如何在不发送信号的情况下保存模型?

在 Django 中使用 Cython,是否有意义?

如何动态访问 Django 模型字段详细名称?

Django 用户配置文件

在 Django 中查询 top x 元素

Django: Force强制 Select 相关?