1

私は次のビューコードを持っています:

        n = Nutrients.objects.all()

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

Nutrition_Data は中間テーブルです。

食品では、request.Post Data から ID を保存します。Queryset (in 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_Dataリレーションシップのテーブルとして設定できることに注意してください。ただし、throughそのテーブルに食品と栄養素の ForeignKey 以外のフィールドがない場合は意味がありません。

于 2012-10-13T12:18:36.510 に答える