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

Переключение набора запросов Django

Есть ли способ перевернуть отношения в квесте Django? Например, превратить набор запросов Foo в набор запросов Bar, если все объекты Foo имеют внешний ключ для Bar?

Возьмем следующий пример:

#condition_n are previously defined statements that results in either True or False
if condition_1:
    foo_qs = Foo.objects.filter(bar__something=...)
    if condition_2:
        foo_qs = foo_qs.filter(bar__another_thing=...)
        if condition_3:
            #you get the point

теперь это приведет к некоторому набору запросов foo_qs в зависимости от оценки операторов типа condition_n. Если бы я хотел также получить набор запросов bar, который получился бы в результате этого, я мог бы сделать следующее:

#condition_n are previously defined statements that results in either True or False
    if condition_1:
        foo_qs = Foo.objects.filter(bar__something=...)
        bar_qs = Bar.objects.filter(something=...)
        if condition_2:
            foo_qs = foo_qs.filter(bar__another_thing=...)
            bar_qs = Bar.objects.filter(another_thing=...)
            if condition_3:
                #you get the point

но в идеале я хотел бы взять любой набор запросов и дать ему имя внешнего ключа (в данном случае «бар») и перевернуть его на эквивалентный набор запросов. Есть ли способ сделать это?


  • У меня нет времени на правильный ответ, но с помощью объектов Q вы можете сделать Q(**{'key': 'value'}). Ключ — это просто строка, поэтому ею легко манипулировать. 07.02.2014
  • пожалуйста, поместите какой-нибудь реальный код... а также то, что вы ожидаете в ответ.... неясно (по крайней мере, для меня), что вы просите (возможно, также включите упрощенный класс модели bar/foo) 07.02.2014
  • Почему бы не построить набор запросов bar_qs, как указано выше, а затем получить набор запросов foo_qs с помощью Foo.objects.filter(bar__in=bar_qs)? 08.02.2014
  • @KevinChristopherHenry Потому что реальная ситуация значительно сложнее, и я не могу просто легко создать набор запросов для qs_bar 08.02.2014

Ответы:


1

Например, превратить набор запросов Foo в набор запросов Bar, если все объекты Foo имеют внешний ключ для Bar?

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

bar_query = {
   'something': 'something',
}

def prefix_fk(query, prefix):
    prefixed_query = {}
    for key, value in query.items():
        prefixed_query[prefix+key] = value
    return prefixed_query

Foo.objects.filter(**prefix_fk(bar_query, 'bar__'))
Bar.objects.filter(**bar_query)

if condition_2:
    bar_query['another_query'] = 'foobar'
    Foo.objects.filter(**prefix_fk(bar_query, 'bar__'))
    Bar.objects.filter(**bar_query)
07.02.2014
  • @RyanSaxe, это не тот ответ, который ты ищешь? (и если да, то почему?) 08.02.2014
  • Новые материалы

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

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

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

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

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

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

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