2016-04-12 12 views
1

私はDjangoフレームワークでアプリケーションを開発しており、その一部にはデータを含むクラスインスタンスがあります。今私はこのデータをデータベースに保存したいのですが、どうすればいいですか?例えばクラスメソッドをdjangoモデルに保存する

の着信がこのある場合:

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

とクラス属性は、次のとおりです。名前、年齢、性別、PHONE_NO、...

は今、私はこのすべてを保存します私のアプリのモデルの属性値はと呼ばれています。app_name.models.Profile

私はこのようなモデルを定義することができます:

models.py

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

は、しかし、これは私の答えは、私は定義し、フィールドを一つずつ保存以外恒久的かつ正確な方法を探していますされていません。 モデルクラスの動的モデルフィールドを定義する方法はありますか?

答えて

2

incomingオブジェクトの各クラスメソッドを呼び出して結果を取得し、対応するフィールド名を使用してProfileインスタンスに格納することができます。ここでは大まかな例だ、あなたはそれが少しそれはあなたのために動作するように微調整する必要があるかもしれません:

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

Pythonのドキュメントをおよそgetattrsetattr

+0

私はあなたがクラスメソッドについて話していますが、 'incoming.name'はメソッドではないクラス属性のように聞こえるか、' @ property'デコレータを持つクラスメソッドですか? –

+0

あなたは正しいですか質問と質問とでメソッドと属性が混ざっています:) –

+0

あなたの答えはお互いにありがとう! 'ismethod()'とは何ですか? –

関連する問題