本文整理汇总了Python中django.db.models.query.Q属性的典型用法代码示例。如果您正苦于以下问题:Python query.Q属性的具体用法?Python query.Q怎么用?Python query.Q使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类django.db.models.query
的用法示例。
在下文中一共展示了query.Q属性的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _get_next_or_previous_by_FIELD
# 需要导入模块: from django.db.models import query [as 别名]
# 或者: from django.db.models.query import Q [as 别名]
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
if not self.pk:
raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
op = 'gt' if is_next else 'lt'
order = '' if is_next else '-'
param = force_text(getattr(self, field.attname))
q = Q(**{'%s__%s' % (field.name, op): param})
q = q | Q(**{field.name: param, 'pk__%s' % op: self.pk})
qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by(
'%s%s' % (order, field.name), '%spk' % order
)
try:
return qs[0]
except IndexError:
raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name)
示例2: _get_next_or_previous_by_FIELD
# 需要导入模块: from django.db.models import query [as 别名]
# 或者: from django.db.models.query import Q [as 别名]
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
if not self.pk:
raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
op = 'gt' if is_next else 'lt'
order = '' if is_next else '-'
param = getattr(self, field.attname)
q = Q(**{'%s__%s' % (field.name, op): param})
q = q | Q(**{field.name: param, 'pk__%s' % op: self.pk})
qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by(
'%s%s' % (order, field.name), '%spk' % order
)
try:
return qs[0]
except IndexError:
raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name)
示例3: update_messages_for_topic_edit
# 需要导入模块: from django.db.models import query [as 别名]
# 或者: from django.db.models.query import Q [as 别名]
def update_messages_for_topic_edit(message: Message,
propagate_mode: str,
orig_topic_name: str,
topic_name: Optional[str],
new_stream: Optional[Stream]) -> List[Message]:
propagate_query = Q(recipient = message.recipient, subject__iexact = orig_topic_name)
if propagate_mode == 'change_all':
propagate_query = propagate_query & ~Q(id = message.id)
if propagate_mode == 'change_later':
propagate_query = propagate_query & Q(id__gt = message.id)
messages = Message.objects.filter(propagate_query).select_related()
update_fields: Dict[str, object] = {}
# Evaluate the query before running the update
messages_list = list(messages)
# The cached ORM objects are not changed by the upcoming
# messages.update(), and the remote cache update (done by the
# caller) requires the new value, so we manually update the
# objects in addition to sending a bulk query to the database.
if new_stream is not None:
update_fields["recipient"] = new_stream.recipient
for m in messages_list:
m.recipient = new_stream.recipient
if topic_name is not None:
update_fields["subject"] = topic_name
for m in messages_list:
m.set_topic_name(topic_name)
messages.update(**update_fields)
return messages_list
示例4: _get_next_or_previous_by_FIELD
# 需要导入模块: from django.db.models import query [as 别名]
# 或者: from django.db.models.query import Q [as 别名]
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
if not self.pk:
raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
op = is_next and 'gt' or 'lt'
order = not is_next and '-' or ''
param = force_text(getattr(self, field.attname))
q = Q(**{'%s__%s' % (field.name, op): param})
q = q | Q(**{field.name: param, 'pk__%s' % op: self.pk})
qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by('%s%s' % (order, field.name), '%spk' % order)
try:
return qs[0]
except IndexError:
raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name)
示例5: pending_for
# 需要导入模块: from django.db.models import query [as 别名]
# 或者: from django.db.models.query import Q [as 别名]
def pending_for(self, instance):
ct = ContentType.objects.get_for_model(instance)
now = timezone.now()
return self.exclude(confirmed=True).filter(content_type=ct,
object_pk=instance.pk).filter(
Q(valid_until__gt=now) | Q(valid_until__isnull=True)).count()