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

标签 python django django-queryset

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/

相关文章:

python - 如何用命令yield url让scrapy抓取

javascript - 从 JS 向 Django 表单输入字段插入一个变量

python - 安装 matplotlib 后,在 Spyder 中导入 pytorch 会导致内核崩溃

python - 如何在电子邮件中设置 Markdown 的默认样式

python - 如何从我的 Django 数据库中检索行数据作为列表?

python - 使用 python ctypes 与 nvapi 接口(interface)(跟进演示代码)

Django 管理仪表板,有没有办法小写模型名称?

django-pyodbc-azure - 如何使用模式

python - django FieldError : Cannot resolve keyword 'category_name_contains' into field. 选项为 : category, 描述、id、图像、名称、订单、价格

django - 将 F() 与注释一起使用,包括 Django 中的另一个查询表达式