【发布时间】:2020-08-28 05:14:17
【问题描述】:
我正在使用 Django 2.2
我有许多与 User 模型反向相关的模型,我想使用不同的过滤器从每个模型中获取计数。
例如,我有一个类似Relations 的模型
status = (
('Active', 'active')
('Inactive', 'inactive')
)
class Relation(models.Model):
user = models.ForeignKey(User, related_name='relation')
status = models.CharField(choices=status, default=ACTIVE)
现在我想为用户分别获取每个状态的计数和查询集。为此,我在 User 模型中定义了模型方法
def get_relation():
return self.relation.all()
def get_active_relation(self):
return self.relation().filter(status='active')
def get_inactive_relation():
return self.relation().filter(status='inactive')
def get_active_count():
return self.get_active_relation().count()
def get_inactive_count():
return self.get_inactive_relaiton().count()
我有用户对象
user = User.objects.prefetch_related(
'relation'
).get(pk=request.user.pk)
现在当我得到计数时,它会为此执行一个额外的查询
user.get_active_count()
如何过滤prefetch_related 对象?
我发现在另一个 SOF 答案中使用 lambda 从 prefetch_related 中获取 max 值:https://stackoverflow.com/a/12609454/3719167
是否也可以使用lambda 来过滤查询集?
【问题讨论】:
标签: django django-models django-queryset