ordery_by不适用于Django中的布尔字段

2024-09-27 00:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行查询,但ordery_by不适用于布尔字段值。如有任何帮助,将不胜感激。多谢各位

models.py:

class ShopOffer(models.Model):
    offer_title = models.CharField(max_length=120)
    added_by = models.ForeignKey(ShopOwnerShopDetails, on_delete=models.CASCADE)
    is_active = models.BooleanField(default=True)

views.py:

queryset = ShopOffer.objects.filter(added_by__user_id=user).order_by('-is_active')

Tags: pyaddedbymodeltitleismodelsclass
2条回答

将其更改如下,以将默认顺序false(0)更改为true(1)

queryset = ShopOffer.objects.filter(added_by__user_id=user).order_by(‘is_active’) 

在数据库中,布尔字段很可能存储为TINYINT(或其他整数类型)。这意味着数字0将表示False,数字1将表示True。所以当你这样打ORM电话时:

ShopOffer.objects.filter(added_by__user_id=user).order_by('-is_active')

SQL查询包含以下部分:

ORDER BY shop_owner_shopoffer.is_active DESC

这是什么意思。这意味着整数字段的降序。因此,数字越大,数字越小,排在第二位。因此1值(True)将排在第一位,0值将排在第二位。所以True将排在第一位,False将排在第二位

因此,如果您希望首先出现假值,您的查询应该如下所示:

ShopOffer.objects.filter(added_by__user_id=user).order_by('is_active')

但再一次,这完全取决于您使用的RDBMS。我建议检查ShopOffer表的DDL代码,以查看is_active字段的类型

更新1

https://i.stack.imgur.com/sx1g4.png

是MySQL

更新2

OP确认这是TINYINT油田

相关问题 更多 >

    热门问题