无法通过 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
我正在构建提醒并尝试通过名为 '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