2017-09-11 110 views
0

我想将数据放入Excel工作表。模型未更新

我写了下面的代码:

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

在打印(用户2),许多<QuerySet []> 2所示。所以我认为也许user2不能被获得。
此外,在if data_dict['name'] == 'Tom':的if-else语句中,user2未更新。

我的代码有什么问题?顺便说一下,data_dict正常。

回答

0

我认为你正在使用自定义的用户模型。所以,如果你给出了User类的定义及其方法,那将会更加清楚。

从我的理解,我认为你需要使用

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

相反的:

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

过滤器()返回一个QuerySet其中包含满足指定过滤器的对象。

因此,您需要使用用户的唯一属性,如'用户名'或'id'才能获得单个用户。如果表具有多个具有相同名称的用户,则使用名称将返回多个对象。

以及更新用户(因为你还没有给出更新的定义),尝试:的

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'试试你的查询,看看会发生什么。 –