2017-09-16 8 views
0
それが可能だ場合、私は知らない

ため、変数のための使用。うまくいけば、皆さんは私がしようとしていることを知っています。私は、値のキーが常にモデルの列と同じ名前を持つため、FORループでモデルの変更を行いたいと思います。Djangoのモデル列

私の現在のコード:

sites = DataModel.objects.all() 
for site in sites: 
    d = self.getDataBySoup(soup) 
    site.title = d['title'] 
    site.text = d['text'] 
    site.facebook = d['facebook'] 
    site.twitter = d['twitter'] 
    site.save() 

あなたが見ることができるように、キーは常にDjangoの列と同じです。だから私はおそらくそれより少ないコードでそれを行うことが可能だと思った。私が試した(しかし、それは働いていない)何

sites = DataModel.objects.all() 
for site in sites: 
    d = self.getDataBySoup(soup) 
    for key, value in d.items(): 
     site.key = value 
    site.save() 

私は3.6

getDataBySoup方法はただのdict /配列を返しているのPythonを使用します。

def getContentDataBySoup(self, soup): 
    data = {} 
    data['title'] = 'some text' 
    # etc 
    return data 

など

+0

あなたは試みましたか: 'DataModel(** d)'? –

+0

既存のすべてのサイトを同じ 'd'で更新したいですか?ほとんどの場合、 'd'は特定のサイトを示す何かを返す必要があり、あなたはそのサイトを更新する必要があります。 –

+0

私はそれを試していません。そして、はい、サイトcoloum名はD 'がtitle' 'と' dict'ある ''場合は、テキスト、...あなたの 'getDataBySoup'方法を示し、あなたが何をしようとして説明することがあります常にDキー – bonblow

答えて

0
sites = DataModel.objects.all() 
for site in sites: 
    d = self.getDataBySoup(soup) 
    DataModel.objects.filter(id=site.pk).update(**d) 

C上記のodeは各サイトのエントリを辞書のデータで更新します。d。更新メソッドを使用している場合、IDを指定することも重要です。そうしないと、更新するエントリがわからなくなります。

+0

どうなるか説明してきましたdjango.db.utils.IntegrityError:UNIQUE制約に失敗しました:app_data.id エラーが発生しました。私はまたタイトルだけで、新しいdictを試してみました。しかし、それは役に立たない。 – bonblow

+0

@bonblow私の悪いことに、その特定のオブジェクトを更新したい場合は、まずIDをフィルタリングする必要があります。私はそれを反映するために私の答えを更新しました。 – Jonathan