1

ここの初心者。たまたま 50 を超えるフィールドを持つ作成オブジェクトを持っています。作成オブジェクトを作成する簡単な方法はありますか? どんな提案でも大歓迎です。ありがとう

SOA_detail.objects.create(
            soa                 =instance, 
            sitename            =rec_fields['sitename'], 
            site_addr           =rec_fields['site_addr'], 
            call_sign           =rec_fields['call_sign'], 
            no_years            =rec_fields['no_years'], 
            channel             =rec_fields['channel'], 
            ppp_units           =rec_fields['ppp_units'], 
            rsl_units           =rec_fields['rsl_units'], 
            freq                =rec_fields['freq'], 
            ...
            duplicate_fee       =rec_fields['duplicate_fee'])

答え。jprofitt からのガイドの後。これが私がしたことです。以下を前提としています: header_name =[]フィールド名の動的リストです。SOA_detail は私のモデルです。 soa_detail = []値です。

   for i in range(len(header_name)):
       for model_field in SOA_detail._meta._fields():
           # check every header_name if it is in model field name
           if header_name[i] == model_field.name:
               # update dict if found
               rec_fields[header_name[i]] = soa_detail[i]  
   SOA_detail.objects.create(soa=instance, **rec_fields)

これは、ほぼ 100 行で構成される元のスクリプトよりもはるかに優れています。

4

1 に答える 1

2

すべてのモデルフィールドをキーとして持つ辞書の場合rec_fields、次のことができますSOA_detail.objects.create(soa=instance, **rec_fields)

于 2013-09-17T01:33:44.223 に答える