gpt4 book ai didi

python - 在 Django 中,如何更改字段查找中的字段名称?

转载 作者:行者123 更新时间:2023-12-02 09:56:13 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com