django中的字段查找使用在代码中声明它们的形式的字段名称。有没有办法为字段提供自定义名称,仅用于查找?
我想用它来创建一个只读字段,但仍然可以在查询中正常使用它。
例如,如果模型如下所示:
class Flight(models.Model):
_cancelled = models.BooleanField()
@property
def cancelled(self):
return self._cancelled
然后必须像这样进行过滤:
Flight.objects.all().filter(_cancelled=True)
既然我们希望外面的世界使用cancelled
作为属性,那么如果我们可以写的话会更好:
Flight.objects.all().filter(cancelled=True)
我尝试过使用Field.db_column属性,但它似乎只会更改数据库中的列名。
对于上面的示例案例,一个合适的管理器就足以处理这个问题了,但是如果还有另一个带有ForeignKey到Flight
的模型,事情会变得更复杂,我们还想对其他模型进行查询,过滤cancelled=True
。
答案 0 :(得分:1)
CustomQuerySetManager允许您轻松添加 QuerySets 而不是管理器本身的方法,因此您可以编写cancelled()
方法并将其随处可用,即使在相关模型中也是如此。
Flight.objects.cancelled()
它是可链接的:
Flight.objects.filter(...).cancelled().update(...)
可用于相关型号:
Airport.flights.cancelled()
快速举例:
class Flight(models.Model):
objects = CustomQuerySetManager()
# Nested class definition, similar to the Meta class
class QuerySet(QuerySet):
def cancelled(self):
return self.filter(_cancelled=True)