2016-12-22 1 views
0

Ich möchte Informationen aus verschiedenen APIs, die im Wesentlichen die gleichen Informationen enthält und ziehen sie in einem generischen Modell sammeln.Verwenden eines 'Mapping-Wörterbuch' zum Speichern von Einträgen im Modell mit Django

Wie kann ich ein Mapping erstellen, um die Beziehungen zu vereinfachen?

Zum Beispiel in dem Moment habe ich eine 'Contact_API_A' model:

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

a 'Contact_API_B' model:

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

Diese Modelle die Namenskonventionen der APIs enthalten.

und ein ‚Kontakt‘ Modell, das meine eigene Namenskonvention verwendet:

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) 

Aus meiner Sicht ist ich die Kontakte aus der jeweiligen APIs hole & sie in ihren Modellen mit einem Wörterbuch zu speichern.

Ansichten:

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() 

in einem zweiten Schritt werden das Einfügen i jene contaccts in mein generisches Kontaktmodell. Ansichten:

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() 

Der tatsächliche Kontakt Wörterbücher weit mehr Informationen enthält, so habe ich versucht, sie zu einer ‚mapping.py‘ Datei zu verschieben und die Datei in Ansichten importieren. Dabei bekomme ich den Fehler, dass der Name 'Kontakt' nicht definiert ist.

mapping.py:

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

der Fehler macht Sinn für mich da 'Kontakt' ist nicht definiert. Wie könnte ich noch eine solche Mapping-Datei verwenden, um meine Ansichten übersichtlicher zu halten und einen besseren Überblick über die verschiedenen Felder zu haben?

Oder gibt es eine andere Möglichkeit, die Informationen z. mit einem Mapping-Modell oder etwas ähnliches?

Danke!

Antwort

0

Sie können einige Konstanten und Lexikonerläuterungen verwenden, um Ihre Daten zu extrahieren. Zum Beispiel:

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

# ... 

contact_api_a_to_contact_dict = {target: getattr(contact, src) for target, src in MAPPING} 
Verwandte Themen