2017-04-06 7 views
0

私はリストのリストを持っています。私はモデルにそのデータを設定したいと思います。リストリストからDjangoモデルを作成する

my_list = [['January', 'February', 'March'], [10, 20, 30], [2, 4, 6]] 

The Model I's like to build is: 

MyModel(models.Model): 
    month = models.Charfield(maxlength=12) # This is my_list[0] 
    sales = models.DecimalField() # This is my_list[1] 
    expenses = models.DecimalField() # This is my_list[2] 

タイプミスをお許しください。私はこれをメモリから入力しました。私は、リストのリストからモデルを生成する方法に関する一般的な原則を探しています。私はリストを単一のdbエントリ(JSONなどを使用して)に格納しないようにしたいのではなく、各dbエントリが単一の値を保持するようにしたいと思います。言い換えれば、私の月の行は、1月、2月、および3月のそれぞれの列を持ちます。

ありがとうございました!

答えて

3

あなたは1つのクエリを使用してすべてのレコードを作成するためのzipbulk_createを使用することができます助けを

objects = [] 
for month, sales, expenses in zip(*my_list): 
    objects.append(MyModel(
     month=month, 
     sales=sales, 
     expenses=expenses 
    )) 
MyModel.objects.bulk_create(objects) 
+0

感謝を。簡単な質問ですが、これはループのためにフィールド定義の後にモデル自体に入りますか?それは、それから呼び出される関数に入りますか? zipとbulk_createの使用はきれいですが、実装方法はわかりません。 – Dan

+1

docs from bulk_create:モデルのsave()メソッドは呼び出されず、pre_saveおよびpost_save信号は送信されません。したがって、カスタム保存メソッドがある場合は、forループでモデルを作成し、forループに保存することができます。しかし、新しいモデルごとにデータベースにヒットするため、bulk_createよりも遅く動作します。 –

関連する問題