如何在Django中从查询集创建实例?

时间:2012-10-13 11:33:01

标签: django view django-queryset

我有以下查看代码:

        n = Nutrients.objects.all()

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

Nutrition_Data是一个中间表。

在食物中我保存了来自request.Post数据的ID。 有没有更好的方法将Queryset(在n中)保存到中间表中?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

请注意,您可以将Nutrients_Data设置为关系中的through表,但如果除了食物和营养素ForeignKeys之外,该表上没有其他字段,那就没有意义了。