模型未更新

2024-09-29 02:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把数据放进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()

在print(user2)中,显示了许多<QuerySet []>。所以我想可能无法获取user2。
此外,在if data_dict['name'] == 'Tom':的if else语句中,user2没有更新

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


Tags: nameclosedataifrateupdateupperdict
1条回答
网友
1楼 · 发布于 2024-09-29 02:24:57

我认为您使用的是自定义用户模型。因此,如果您给出用户类及其方法的定义,将会更加清楚

据我所知,我认为你需要

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

而不是:

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

filter()返回一个Queryset,其中包含满足指定筛选器的对象

所以你需要使用一个独特的用户属性,比如“username”或者“id”来获得一个用户。如果表中有多个同名用户,则using name将返回多个对象

要更新用户(因为您还没有给出更新的定义),请尝试:

  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'])

相关问题 更多 >