2017-09-11 33 views
0

データをExcelワークシートに挿入したいと思います。私は次のコードを書いたモデルが更新されていません

:プリント(USER2)で

data_dict ={} 
data_dict =defaultdict(dict) 
def try_to_int(arg): 
    try: 
     return int(arg) 
    except: 
     return arg 

def main(): 
    book4 = xlrd.open_workbook('./data/excel1.xlsx') 
    sheet4 = book4.sheet_by_index(0) 

    tag_list = sheet4.row_values(0)[1:] 
    for row_index in range(1, sheet4.nrows): 
     row = sheet4.row_values(row_index)[1:] 
     row = list(map(try_to_int, row)) 
     value = dict(zip(tag_list, row)) 

     data_dict[value['age']].update(value) 

     user2 = User.objects.filter(name=data_dict['name']) 
     print(user2) 
     if user2: 
      if data_dict['name'] == 'Tom': 
       user2.update(close_rate_under_300_ny = data_dict['300'], 
       close_rate_under_700_ny = data_dict['d700'], 
       close_rate_upper_700_ny = data_dictt['u700']) 
      elif data_dict['name'] == 'John': 
       user2.update(close_rate_under_300_eu = data_dict['300'], 
       close_rate_under_700_eu = data_dict['d700'], 
       close_rate_upper_700_eu = data_dict['u700']) 
      elif data_dict['name'] == 'Blear': 
       user2.update(close_rate_under_300_uk = data_dict['300'], 
       close_rate_under_700_uk = data_dict['d700'], 
       close_rate_upper_700_uk = data_dict['u700']) 
      else: 
       user2.update(close_rate_under_300_ch=data_dict['300'], 
       close_rate_under_700_ch = data_dict['d700'], 
       close_rate_upper_700_ch = data_dict['u700']) 

main() 

を、多くの<QuerySet []>が示されました。だから私は多分user2を得ることができないと思う。
さらに、if-elseステートメントif data_dict['name'] == 'Tom':では、user2は更新されません。

私のコードで何が間違っていますか?ところで、data_dictが正常に取得されます。

答えて

0

あなたはカスタムユーザーモデルを使用していると思います。だから、あなたがUserクラスとそのメソッドの定義を与えた方がもっとはっきりします。

私が理解したものから、私はあなたが

user2 = User.objects.get(name=data_dict['name']) 

の代わりに使用する必要があると思う:)

user2 = User.objects.filter(name=data_dict['name']) 

フィルタを(指定したフィルタを満たすオブジェクトを含むクエリセットを返します。

したがって、単一のユーザーを取得するには、「ユーザー名」や「ID」などのユーザーの一意の属性を使用する必要があります。名前を使用すると、テーブルに同じ名前の複数のユーザーが存在する場合、複数のオブジェクトが返されます。 (アップデートの定義与えられたhaventは以降)

そしてユーザーを更新するため、試してみてください。

if user2: 
     if data_dict['name'] == 'Tom': 
      user2.close_rate_under_300_ny = data_dict['300'] 
      user2.close_rate_under_700_ny = data_dict['d700'] 
      user2.close_rate_upper_700_ny = data_dictt['u700'] 
      user2.save() 
     elif data_dict['name'] == 'John': 
      user2.close_rate_under_300_eu = data_dict['300'] 
      user2.close_rate_under_700_eu = data_dict['d700'] 
      user2.close_rate_upper_700_eu = data_dict['u700'] 
      user2.save() 
     elif data_dict['name'] == 'Blear': 
      user2.close_rate_under_300_uk = data_dict['300'] 
      user2.close_rate_under_700_uk = data_dict['d700'] 
      user2.close_rate_upper_700_uk = data_dict['u700'] 
      user2.save() 
     else: 
      user2.close_rate_under_300_ch=data_dict['300'] 
      user2.close_rate_under_700_ch = data_dict['d700'] 
      user2.close_rate_upper_700_ch = data_dict['u700'] 
      user2.save() 

を代わりに

if user2: 
     if data_dict['name'] == 'Tom': 
      user2.update(close_rate_under_300_ny = data_dict['300'], 
      close_rate_under_700_ny = data_dict['d700'], 
      close_rate_upper_700_ny = data_dictt['u700']) 
     elif data_dict['name'] == 'John': 
      user2.update(close_rate_under_300_eu = data_dict['300'], 
      close_rate_under_700_eu = data_dict['d700'], 
      close_rate_upper_700_eu = data_dict['u700']) 
     elif data_dict['name'] == 'Blear': 
      user2.update(close_rate_under_300_uk = data_dict['300'], 
      close_rate_under_700_uk = data_dict['d700'], 
      close_rate_upper_700_uk = data_dict['u700']) 
     else: 
      user2.update(close_rate_under_300_ch=data_dict['300'], 
      close_rate_under_700_ch = data_dict['d700'], 
      close_rate_upper_700_ch = data_dict['u700']) 
+0

THXの、ウルanswer.Iはウルのコードが、アプリを書きました。 models.DoesNotExist:クエリに一致するユーザーが存在しません。エラーが発生します。これをどのように修正する必要がありますか? – user8504021

+0

これは、その特定の名前のユーザーがデータベースに存在しないことを意味します。データベースにデータを設定しましたか?クエリを実行する前に、いくつかのユーザーを追加する必要があります。最初に './manage.py shell'を使ってクエリを実行し、何が起こるかを見てください。 –

関連する問題