Django:在PostgreSQL中按BooleanField排序

3

在尝试用postgresql的order_by布尔字段进行排序时,我看到了奇怪的输出。

我有一个布尔字段,默认值为false, 我使用order_by(-thebooleanfield),有时候我会首先看到True值,这是我期望的,但有时候False值会首先出现。

我需要换一种类型吗? 或者有一种正确的方式可以按照postgresql的布尔字段进行排序吗?

谢谢。

1个回答

1
Django 按照底层数据库中存储的值进行排序。我从未在 Django 文档中找到任何官方解释,但是有一段时间以前的 Django 票证明了这一点。

https://code.djangoproject.com/ticket/19726

基本上,开发者将其标记为“不修复”,因为在数据库后端之间实现一致的行为会使它们更加脆弱。
最好的方法是在客户端对值进行排序,以确保一致的行为。

在客户端进行排序不是一个选项,那么使用一个带有0/1的小整数字段呢? - DjangoPy
据我理解,default=False 是在 Django 层处理而不是 DB 层处理的,也许当将模型保存到数据库时,我应该明确地将值设置为 False。 - DjangoPy
我想那应该可行,但你可能需要确保表单字段小部件是复选框而不是文本输入。也许你可以在你的视图中添加一些逻辑来检查第一个排序项的布尔值并在它不是你想要的时候反转它。 - Fiver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接