在查询集过滤器中将模型属性用作常规字段

时间:2019-05-06 12:43:58

标签: python django python-3.x django-models

我想在filter中使用属性作为普通模型字段,以减少代码重复。

我想要得到什么:

class SomeModel(models.Model):
    # ...

    @property
    def is_active(self):
        # some query e.g.:
        return self.some_related.filter(some_complex_query).exists()


SomeModel.objects.filter(is_active=True)

有可能吗?

我知道我可以覆盖manager并以另一种方式来做:SomeModel.objects.filter_active(True)。但这并不像第一个示例那么好。

更新:当前实现

class SomeManager(models.Manager):
    def with_is_active(self):
        return self.annotate(is_active='some query')

class SomeModel(models.Model):
    objects = SomeManager()
    # ...

    @property
    def is_active(self) -> bool:
        raise ValueError('Use SomeModel.objects.with_is_active()!')


SomeModel.objects.with_is_active().filter(is_active=True)

0 个答案:

没有答案