app.models.MultipleObjectsReturned: get () вернул более одного пользователя - вернул 17

0

Я получил ошибку, app.models.MultipleObjectsReturned: get() возвратил более одного пользователя - он вернул 17! , Я хочу разобрать excel и поместить его в модель (City & Prefecture & Area & User). я написал

  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', '×', '×', '×']] к моделям, которые похожи на "Америка" в зону префектуры, а также от имени города А до города и × в название цены. Как я могу это исправить? Что мне написать?

  • 0
    Кого из этих 17 пользователей вы ожидаете вернуть? что неясно в сообщении об ошибке?
  • 0
    у вас 17 пользователей в corporation достаточно ли какого-либо пользователя установить Prefecture.area ?
Показать ещё 3 комментария
Теги:

2 ответа

0
Лучший ответ

Попытайтесь сначала захватить первую запись экземпляра, используя этот метод ()

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

Это помогает получить первую запись экземпляра конкретного объекта, это может помочь вам

  • 1
    Вы прочитали сообщение об ошибке? «get () вернул более одного пользователя»
  • 3
    Вы уверены, что эта логика верна для ОП?
Показать ещё 3 комментария
2

Вот:

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

Вы пытаетесь получить одного пользователя, но у вас есть несколько пользователей, соответствующих corporation_id=val3. Поскольку objects.get() не может догадаться, какой из них вам действительно нужен, он делает разумную вещь при поднятии ошибки с очень явным сообщением: "get() возвратил более одного пользователя - он вернул 17"

На данный момент у вас есть в основном четыре решения:

  1. получить первый пользователь (или последний или любой случайный), соответствующий вашему запросу (используя User.objects.filter(corporation_id=val3).first() - or.last() 'и т.д.) и назовите его днем. Ну, вы можете рассматривать это как решение... вроде... если вам не нужен результат.

  2. Сделайте corporation_id уникальным для вашей модели User. Это означает, что у вас может быть только один пользователь на корпорацию, поэтому для каждого corporation_id вам нужно будет выбрать один и удалить все остальные. Ну, вы можете рассматривать это как решение... вроде... если вы не заботитесь о том, чтобы потерять большинство ваших пользователей.

  3. Добавьте в модель пользователя другое логическое поле "use_for_imports", сделайте комбинацию этого поля и corporation_id уникальной и измените свой запрос на "User.objects.get(corporation_id = val3, use_for_import = True) . This will also require that you mark one user as "use for imports" for each corporation, else . This will also require that you mark one user as "use for imports" for each corporation, else get() will raise a исключению User.DoesNotExist.

  4. С помощью другого поля пользователя или комбинации полей, которые Гарантированные быть уникальными для поиска пользователя, или использовать другой способ, чтобы получить область (так как вы используете только пользователь для area значения поля). Здесь никто не может помочь, так как вы ничего не говорили о своих моделях, требованиях и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню