2016-04-12 21 views
1

Django çerçeveli bir uygulama geliştiriyorum ve bunun bir kısmında veri içeren bir sınıf örneği alıyorum. Şimdi bu veriyi veritabanımda saklamak istiyorum, ne yapmalıyım? ÖrneğinDjango modelinde bir sınıf yöntemi depolayın

gelen bu ise:

>>>type(incoming) 
<class 'foo.bar.model'> 
>>>incoming.name 
'hosein' 

Ve sınıf nitelikleri şunlardır: isim, yaş, cinsiyet, phone_no ...

Şimdi tüm bu saklamak istediğiniz Ben böyle bir model tanımlayabilirsiniz biliyoruz app_name.models.Profile

denilen Uygulamamın modelinde değerleri bağlıyor:

models.py

class Profile(models.Model): 
    name = models.CharField(max_length = 255) 
    age = models.IntegerField() 
    # And so on ... 

Ama bu cevabım, ben tanımlayıp alanları birer birer saklanması hariç kalıcı ve kesin bir şekilde arıyorum değildir. Model sınıfım için bazı dinamik model alanlarını tanımlamanın bir yolu var mı?

cevap

2

Sonuçları almak için her sınıf yöntemini incoming nesnelerine çağırabilirsiniz, ardından Profile örneğinde saklamak için karşılık gelen alan adını kullanabilirsiniz. İşte kaba bir örnek, bunun biraz sizin için çalışmasını sağlamak için ince ayar gerekebilir:

# create a Profile object 
new_profile = Profile() 

for name in dir(incoming): 
    # loop on each method for incoming object 
    attribute = getattr(incoming, name) 
    if not ismethod(attribute): 
     # get the value of the attribute 
     value = attribute 
    setattr(new_profile, name, value) 

new_profile.save() 

piton doc yaklaşık getattr ve setattr.

+0

Sınıf yöntemlerinden bahsederken, ama 'incoming.name' yöntemlerin sınıf özniteliklerine benzemediğinizi mi yoksa" @ özellik "dekoratörüyle sınıf yöntemleri mi olduğunu varsayalım? –

+0

Haklısınız Soruyu sormak için metodu ve öznitelikleri karıştırdım :) –

+0

Cevabınız için teşekkürler ama birbirinize! 'ismethod()' nedir? –

İlgili konular