2011-10-05 15 views
12

Clinictrials.gov adresinden bir mySQL veritabanına yaklaşık 30k xml dosyaları yüklemeye çalışıyorum ve birden çok konum, anahtar sözcük, vb. Işleme biçimim, ManyToManyFields kullanarak ayrı bir modelde.Django Fikstürleri ManyToManyFields'ı nasıl kullanır?

Anladığım en iyi yol, verileri bir fikstür kullanarak okumaktır. Dolayısıyla sorum şu: Verilerin başka bir modele işaret ettiği alanları nasıl ele alabilirim?

Ne yazık ki cevap edebilmek için, ManyToMany/ForeignKeys nasıl çalıştığı hakkında yeterince bilgimiz yok

... yardım

sayesinde Aşağıdaki örnek kod: _ _ ManyToMany alanları temsil

{ 
    "pk": trial_id, 
    "model": trials.trial, 
    "fields": { 
      "trial_id": trial_id, 
      "brief_title": brief_title, 
      "official_title": official_title, 
      "brief_summary": brief_summary, 
      "detailed_Description": detailed_description, 
      "overall_status": overall_status, 
      "phase": phase, 
      "enrollment": enrollment, 
      "study_type": study_type, 
      "condition": _______________, 
      "elligibility": elligibility, 
      "Criteria": ______________, 
      "overall_contact": _______________, 
      "location": ___________, 
      "lastchanged_date": lastchanged_date, 
      "firstreceived_date": firstreceived_date, 
      "keyword": __________, 
      "condition_mesh": condition_mesh, 
    } 

}

+0

Yanıtı hatırlamıyorum, ancak geliştirme sunucunuzu çalıştırırsanız admin kullanarak örnek verileri ve daha sonra veritabanını "manage.py dumpdata" komutunu kullanarak bir json dosyasına dökün, fikstürlerinizi örnek olarak kullanarak oluşturabilirsiniz. ilişki alanları için fikstür oluşturmayı öğrenmek için ihtiyacım olduğunda yaptığım şey buydu. :) – akonsu

cevap

16

bir yabancı anahtar bağlantı verdiğiniz nesnenin pk basittir, bir manytomanyfield pk yılların listesini kullanır.

[ 
    { 
     "pk":1, 
     "model":farm.fruit, 
     "fields":{ 
      "name" : "Apple", 
      "color" : "Green", 
     } 
    }, 
    { 
     "pk":2, 
     "model":farm.fruit, 
     "fields":{ 
      "name" : "Orange", 
      "color" : "Orange", 
     } 
    }, 
    { 
     "pk":3, 
     "model":person.farmer, 
     "fields":{ 
      "name":"Bill", 
      "favorite":1, 
      "likes":[1,2], 
     } 
    } 
] 

Bunu yapmak için muhtemelen bir dönüştürme komut dosyası yazmanız gerekecektir. Fikstür çok çürük olabilir; 30k kayıtlarını dönüştürmeden önce çok fazla zaman harcayabilmek için bir alt kümeyle denemeyi yapmak çok zor. (yalnızca içe aktarma yapamayacaklarını bulmak için)

+0

Teşekkürler. Armatürlerin zayıflığı göz önüne alındığında, XML verilerini DB'ye aktarmanın başka bir yolunu önerir misiniz? – CMaury

+0

XML okuyan ve Deneme nesnesi oluşturan bir Python komut dosyası kullanın, ardından deneme.save() öğesini kullanın. – blaze