如何解决无法在 Django 中通过 BooleanField 过滤对象
我正在构建一个提醒并尝试通过名为“状态”的 BooleanField 过滤 Task 对象。
如您所见,我已将 Task.objects.filter(status=False) 分配给 undone_tasks,但是当我运行它时,出现此错误:ProgrammingError at /showing-all-tasks/ NOT 的参数必须是布尔类型,而不是类型不同的字符 第 1 行:..."status","task"."reminder" FROM "task" WHERE NOT "task"."st...
这是在 postgres 中运行的查询: SELECT "task"."id","task"."user_id","task"."title","task"."slug","task"."description","task"."deadline_date","任务”。“日期编辑”,“任务”。“状态”,“ task"."reminder" FROM "task" WHERE NOT "task"."status" ORDER BY "task"."deadline_date" DESC
当我在 pgAdmin 中将 "task"."status" 更改为 "task"."status" = 'true' 时,一切正常!但我很困惑!首先:为什么我会收到这个错误?其次:如果 status 是一个 BooleanField,为什么当我将它与 string('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,verbose_name='task',related_name='task_reminder_notifications')
解决方法
我是这样解决这个问题的:
我检查了 pgadmin 4 中“状态”的类型,它是字符变化而不是布尔值,所以我使用下面的查询更改了它的类型:
ALTER TABLE task ALTER COLUMN status TYPE BOOLEAN USING status::boolean
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。