无法通过 Django 中的 BooleanField 过滤 objects

Can't filter objects by BooleanField in Django

我正在构建提醒并尝试通过名为 'status' 的 BooleanField 过滤任务 objects。

如您所见,我已将 Task.objects.filter(status=False) 分配给 undone_tasks,但是当我 运行 它时,我收到此错误:ProgrammingError at /showing-all-tasks/ NOT 的参数必须是布尔类型,而不是类型字符变化 第 1 行:...“状态”、“任务”、“提醒”来自“任务”而不是“任务”。“st ...

这是 postgres 中的查询 运行ning: SELECT "任务"."id", "任务"."user_id", "任务"."标题", "任务"."slug", "任务"."描述", "任务"."deadline_date", "任务"."date_edited", "任务"."状态", " 任务“。提醒”来自“任务”,而不是“任务”。“状态”按“任务”排序。“deadline_date” DESC

当我在 pgAdmin 中将 "task"."status" 更改为 "task"."status" = 'true' 时,一切正常!但我很困惑!首先:为什么我会收到此错误?其次:如果 status 是一个布尔字段,为什么当我将它与一个字符串 ('true') 进行比较时我没有收到任何错误?

感谢您的帮助!

views.py

class TaskListView(ListView):
    model = Task
    template_name = 'mysite/show_tasks.html'

    def get_context_data(self, **kwargs):
        context = super(TaskListView, self).get_context_data()
        undone_tasks = Task.objects.filter(status=False)        
        return context

models.py

class Task(models.Model):
  # some other fields...
  status = models.BooleanField(verbose_name='Task Status', default=False)

class ReminderNotification(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='user', related_name='owner_notifications')
    message = models.TextField(max_length=200, default="", blank=True, null=True, verbose_name='message')
    task = models.ForeignKey(Task, on_delete=models.CASCADE, verbose_name='task',
                             related_name='task_reminder_notifications')

我是这样解决这个问题的: 我在 pgadmin 4 中检查了“状态”的类型,它是字符变化的而不是布尔值,所以我使用下面的查询更改了它的类型: ALTER TABLE task ALTER COLUMN status TYPE BOOLEAN USING status::boolean