Nano Hash - криптовалюты, майнинг, программирование

MultipleObjects Возвращается в сложном наборе запросов, в то время как результат должен быть уникальным

Я использую Django 2.0 и сталкиваюсь со странными проблемами с набором запросов needs, созданным из объединения () двух наборов запросов:

needs.get(pk="3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f")
---------------------------------------------------------------------------
MultipleObjectsReturned                   Traceback (most recent call last)
<ipython-input-29-300ad17a22c2> in <module>()
----> 1 needs.get(pk="3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f")

/usr/local/lib/python3.6/site-packages/django/db/models/query.py in get(self, *args, **kwargs)
    405         raise self.model.MultipleObjectsReturned(
    406             "get() returned more than one %s -- it returned %s!" % 
--> 407             (self.model._meta.object_name, num)
    408         )
    409 

и с тем же набором запросов:

for n in needs:
    print(n.pk)

3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f
7c134214-6309-4881-b381-016cc00a31a5

Итак: needs - это набор запросов с двумя объектами, один из которых имеет первичный ключ (UUID), установленный как 3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f. Но функция get() вызывает MultipleObjectsReturned.

Есть идеи, что вызывает такое поведение? Правильно ли искать UUID с его строковым представлением?

Не особо утруждая вас своими моделями, вот как я генерирую needsqueryset:

own_needs = models.Need.objects.filter(owner="bfd8e679-7660-4dcd-83bd-614fbd99b506")
mandate=models.ListMandate.objects.get(mandated=user1, permission=models.ListMandate.CAN_BUY_NEEDS, revoked_on=None)
shared_needs=models.Need.objects.filter(list=mandate.target)
needs = own_needs.union(shared_needs)

Спасибо за просветление!


  • Обратите внимание, что использование needs = (own_needs | shared_needs).distinct() работает должным образом. Я подозреваю, что union() от Django все еще немного свеж. 14.05.2018

Ответы:


1

Объединение может привести к дублированию. Попробуйте использовать distinct с результатом queryset.

needs = own_needs.union(shared_needs).distinct()
14.05.2018
  • Спасибо за ответ. Я использовал distinct(), без изменений. Как видите, все равно в наборе запросов / БД нет дубликатов. В документации Django прямо говорится, что union () возвращает отдельные результаты. 14.05.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..