1

我有以下查看代码:

        n = Nutrients.objects.all()

        for q in n:
            q.save()
            Nutrition_Data.objects.create(food = l, nutrients = q)

Nutrition_Data 是一个中间表。

在食物中,我从 request.Post 数据中保存 ID。有没有更好的方法将查询集(在 n 中)保存到中间表中?

4

2 回答 2

0

是的,您可以更有效地执行此操作(需要 Django>=1.4):

n = Nutrients.objects.all()
to_save = []

for q in n:
    # q.save() absolute since you just queried the database so no need to save it again
    nutrient_data = Nutrition_Data(food=l,
                                   nutrients_id=q.pk)
    to_save.append(nutrient_data)

Nutrition_Data.objects.bulk_create(to_save)
于 2012-10-13T12:08:01.897 回答
0

您应该将食物和营养素之间的关系定义为 ManyToManyField。然后您可以一次性创建数据:

n = Nutrients.objects.all()
l.nutrients.add(*n)

请注意,您可以将关系设置Nutrients_Datathrough表格,但如果该表格上除了食物和营养素外键之外没有其他字段,则没有意义。

于 2012-10-13T12:18:36.510 回答