我正在运行查询,但是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')
答案 0 :(得分:1)
按如下所示进行更改,以将默认的false(0)设置为true(1)
queryset = ShopOffer.objects.filter(added_by__user_id=user).order_by(‘is_active’)
答案 1 :(得分:1)
在您的数据库中,布尔字段很可能以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
将排在第二。
因此,如果您想首先使用False值,则查询应类似于:
ShopOffer.objects.filter(added_by__user_id=user).order_by('is_active')
但是,这再次取决于您使用的RDBMS。我建议检查ShopOffer
表的表的DDL代码-以查看is_active
字段的类型。
UPDATE1
https://i.stack.imgur.com/sx1g4.png
是MySQL
UPDATE2
OP确认它是TINYINT字段