app.models.multipleObject返回:get()返回了多个用户它返回了17

2024-09-30 16:22:04 发布

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

我有个错误,app.models.multipleObject返回:get()返回了多个用户--它返回了17。 我想解析excel并把它放到模型中(城市和地区&用户)。我写的

  fourrows_transpose = list(map(list, zip(*fourrows)))
  val3 = sheet3.cell_value(rowx=0, colx=9)
  user3 = User.objects.get(corporation_id=val3)
  print(user3)
  if user3:
   area = Area.objects.filter(name="America")
   pref = Prefecture.objects.create(name="prefecture", area=user3.area)
   city = City.objects.create(name="city", prefecture=pref)
   price_u1000 = Price.upper1000.objects.get(city=city)
   price_500_1000 = Price.from500to1000.objects.get(city=city)
   price_u500 = Price.under500.objects.get(city=city)

   pref.name = "NY"
   pref.save()

   for i in range(len(fourrows_transpose)):
       city.name = fourrows_transpose[i][1]
       city.save()
       print(fourrows_transpose[i][1])

       price_u1000.name = fourrows_transpose[i][2]
       price_u1000.save()
       print(fourrows_transpose[i][2])

       price_500_1000.name = fourrows_transpose[i][3]
       price_500_1000.save()
       print(fourrows_transpose[i][3])

       price_u500.name = fourrows_transpose[i][4]
       price_u500.save()
       print(fourrows_transpose[i][4])

我想把这些数据 [['America', '', '', '', ''], ['', '', 'u1000', '500~1000', 'd500'], ['NY', 'City A', '×', '×', '×'], ['', 'City B', '×', '×', '×'], ['', 'City C', '×', '×', '×'], ['', 'City D', '×', '×', '×'], ['', 'City E', '×', '×', '×']] 像“美国”到地区,城市A到城市名称和价格。我该怎么解决这个问题?我应该写什么?在


Tags: namecitygetobjectssaveareapriceprint
2条回答

尝试使用此方法捕获实例的第一条记录first()

user3 = User.objects.filter(corporation_id=val3).first()

它有助于获取特定对象实例的第一条记录,这些可以对您有所帮助

这里:

user3 = User.objects.get(corporation_id=val3)

您试图获取一个用户,但有多个用户与corporation_id=val3匹配。由于objects.get()无法猜出您真正想要的是哪一个,所以它用一个非常明确的消息来引发一个错误:“get()返回了多个用户,它返回了17”

目前主要有四种解决方案:

  1. 获取与您的查询匹配的第一个用户(或最后一个或任意一个用户)(使用User.objects.filter(corporation_id=val3).first()- or.last()`etc)并调用它一天。好吧,你可以把它当作一个解决方案。。。有点。。。如果你不在乎结果。

  2. 使corporation_id对于您的User模型是唯一的。这意味着每个公司只能有一个用户,因此对于每个公司,您必须选择一个并删除所有其他用户。好吧,你可以把它当作一个解决方案。。。有点。。。如果你不在乎失去你的大部分用户。

  3. 向用户模型中添加另一个“use_for_imports”布尔字段,使此字段和公司的组合唯一,并将查询更改为``用户.objects.get(corporation\uid=val3,使用_for_import=True). This will also require that you mark one user as "use for imports" for each corporation, elseget()will raise a用户.doesnotex`例外情况。

  4. 请使用另一个用户字段或字段组合,这些字段在用户查找时是唯一的,或者使用另一种方法来获取区域(因为您只将用户用于area字段值)。在这里,没有人能帮上忙,因为你没有说任何关于你的型号、要求等的事情。

相关问题 更多 >