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 属性,但它似乎只更改了数据库中的列名称。
对于上面的示例案例,一个适当的 Manager 就足以处理这个问题,但是如果有另一个模型使用foreignkey到Flight
,并且我们想要在另一个模型上进行查询,事情就会变得更加复杂模型,仍在过滤 cancelled=True
。
最佳答案
CustomQuerySetManager允许您轻松添加方法 do 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)
关于python - 在 Django 中,如何更改字段查找中的字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20710398/