2016-12-22 6 views
0

基本的に同じ情報を含むさまざまなAPIから情報を取り出し、汎用モデルで収集したいと考えています。'マッピング辞書'を使用してdjangoでモデルのエントリを保存する

関係を簡単にするためのマッピングを作成するにはどうすればよいですか?

class ContactAPIA(models.Model): 
    id = models.CharField(primary_key=True, max_length=100) 
    name = models.CharField(max_length=50) 

'Contact_API_B' モデル::

class ContactAPIB(models.Model): 
    UUID = models.CharField(primary_key=True, max_length=100) 
    full_name = models.CharField(max_length=50) 

これらのモデルは、APIの命名規則が含まれている

は例えば、現時点では私は 'Contact_API_A' モデルを持っています。

と私自身の命名規則を使用している「コンタクト」モデル:私は辞書を使用してモデルにそれらを保存し、それぞれのAPI &から連絡先を取得しています私の見解では

class Contact(models.Model): 
    id = models.CharField(primary_key=True, max_length=100) 
    full_name = models.CharField(max_length=50) 
    source = models.CharField(max_length=10) 

ビュー:

def get_contacts_API_A(request): 
    ... 
    contacts_api_a = API_A.contacts() 

    for contact in contacts_api_a: 
     contact_api_a_dict = { 
      'id':contact.id, 
      'name':contact.name} 

     c = ContactAPIA(**contact_api_a_dict) 
     c.save() 

第二段階では、私は私の一般的な接触モデルにそれらのcontacctsを挿入しています。 ビュー:実際の接触辞書ははるかに多くの情報が含まれて

def contacts_api_a_to_contacts(request): 
    ... 
    contacts = ContactAPIA.objects.all() 

    for contact in contacts: 
     contact_api_a_to_contacts_dict = { 
      'id':contact.id, 
      'full_name':contact.name, 
      'source':'api_a'} 

     c = Contact(**contact_api_a_to_contact_dict) 
     c.save() 

ので、私は「mapping.py」ファイルに移動し、ビューにそのファイルをインポートしようとしました。 そうすると、「連絡先」という名前が定義されていないというエラーが表示されます。

mapping.py: '連絡先' が定義されていないので、

contact_api_a_dict = { 
     'id':contact.id, 
     'name':contact.name} 

エラーが私には意味があります。どのように私はまだこのようなマッピングファイルを使用して私のビューをより細かく保ち、異なるフィールドのより良い概観を得ることができますか?

また、情報をマッピングする別の方法があります。マッピングモデルまたは類似のもので?

ありがとうございます!

答えて

0

いくつかの定数と辞書内包表記を使用してデータを抽出できます。例:

MAPPING = (
    ('id', 'id'), 
    ('full_name', 'name'), 
) 

# ... 

contact_api_a_to_contact_dict = {target: getattr(contact, src) for target, src in MAPPING} 
関連する問題