Как я делаю ИЛИ просачиваюсь запрос Django?

invokespecial используется для реализации любой из трех вещей

  1. Вызов конструктора
  2. Вызов метода private
  3. Выполнение вызова super. …

Хотя 1. здесь не применяется (поскольку имя целевого метода не ), в любом из других случаев требуется, чтобы тип получателя был текущего класса или его подкласса. Таким образом, даже когда класс объявления метода равен Type, ожидается, что фактический тип получателя будет назначаться текущему классу, Type$ClassType.

Ближайшим эквивалентом того, что вы создали со своим изменением, является вызов super, хотя в исходном коде Java вызов метода через super заставляет ссылку на приемник быть такой же, как this, что присваивается текущему классу.

На уровне байт-кода правила менее ограничительны, тем не менее, вызов метода, позволяющий обходить объявления методов в вашем текущем классе или его подклассах, не разрешается вызывать для ссылки на тип, которая может указывать на экземпляр полностью несвязанная иерархия подклассов, то есть Type не является Type$ClassType.

Соответствующее правило JVMS уже упоминалось в ответе Апангина .

278
задан daaawx 15 April 2019 в 20:04
поделиться

2 ответа

Существует объектов Q , которые позволяют выполнять сложные поиски. Пример:

from django.db.models import Q

Item.objects.filter(Q(creator=owner) | Q(moderated=False))
504
ответ дан Alex Koshelev 23 November 2019 в 02:04
поделиться

Вы можете использовать | оператор для непосредственного объединения наборов запросов без необходимости использования объектов Q:

result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)

(edit - я изначально был не уверен, вызвал ли это дополнительный запрос, но @spookylukey указал, что ленивая оценка набора запросов позаботится об этом)

117
ответ дан Andy Baker 23 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: