Фильтр модели django с использованием понимания словаря
У меня есть модель, называемая cards, которая содержит ряд элементов, которые я хочу перебирать в цикле. Поэтому я пытался использовать некоторое понимание словаря следующим образом:
cards = Card.objects.filter(device=device)
output = { c.id : [c.generateData(), c.sensor.getLatestTime()] for c in cards}
При выполнении этого кода он обрывается на операторе вывода со следующей ошибкой:
Значение QuerySet для точного поиска должно быть ограничено одним результатом используя нарезку.
Большинство ответов, которые я нашел для этой точной ошибки, были для случаев, когда кверисет путается с одним полем, как в 1, 2. Однако в моем случае я ожидаю и обрабатываю его как кверисет, проходя по нему циклом.
Я также видел похожий вопрос в здесь об использовании понимания словаря на моделях, однако, насколько я могу судить, мой формат почти такой же (Разве что список в качестве второго параметра как-то вызывает проблему?)
Edit: Я заметил, пытаясь проверить, где происходит ошибка, что даже простой цикл for, такой как:
for card in cards:
выдает ту же ошибку, похоже, что ошибка находится в строке:
cards = Card.objects.filter(device=device)
Честно говоря, это не имеет для меня особого смысла. Такое ощущение, что я забыл что-то фундаментальное, но пока не могу этого увидеть.
Выяснилось, что ошибка была очень глупой, в утверждении:
output = { c.id : [c.generateData(), c.sensor.getLatestTime()] for c in cards}
Ошибка возникала примерно здесь, заставляя меня думать, что проблема возникла в:
cards = Card.objects.filter(device=device)
Поскольку код сломался вокруг этой части, однако при дальнейшем рассмотрении, после замены этого утверждения на:
cards = Card.objects.all()
Решив проблему, я обнаружил, что ошибка возникала на параметрах фильтра, поскольку несколькими строками ранее я делал следующее:
device = Device.objects.filter(project__user=user,id=id)
попробовал использовать набор запросов во 2-м условии. Таким образом, заменив его на:
device = Device.objects.get(project__user=user,id=id)
решил мою проблему.