Keystone js 6不允许我添加复选框字段,它看起来如下
// checkbox_field: checkbox({ label: 'Checkbox Field', access: { read: ()=> true, update: ()=> true } }),
我认为这是因为我在db中有一些空值,因为我有一个与文本类型字段相同的问题,这很容易使用db解决。isNullable === true。但是,我找不到一个类似的复选框字段类型的选项。
我尝试使用defaultValue选项和db。地图,但它没有帮助
Keystone在哪些方面不允许';这个吗?你得到一个错误吗?如果没有关于正在发生什么的具体信息,很难帮助解决问题。
我已经将您提供的字段配置添加到任务管理器示例的本地副本中,没有问题。
import { list } from '@keystone-6/core';
import { allowAll } from '@keystone-6/core/access';
import { checkbox, relationship, text, timestamp } from '@keystone-6/core/fields';
import { select } from '@keystone-6/core/fields';
export const lists = {
Task: list({
access: allowAll,
fields: {
label: text({ validation: { isRequired: true } }),
// Test field ⬇️
checkbox_field: checkbox({
label: 'Checkbox Field',
access: { read: () => true, update: () => true }
}),
// .. other fields
},
}),
.. other lists
};
我已经将db.useMigrations
设置为true
,所以当我重新启动应用程序时,我被提示创建并命名一个将添加列的迁移。生成的SQL如下所示。这是针对PostgreSQL的,但它应该适用于其他数据库提供商。
-- AlterTable
ALTER TABLE "Task" ADD COLUMN "checkbox_field" BOOLEAN NOT NULL DEFAULT false;
这将向DB添加一个非空列,并将默认值应用于任何现有记录(因此不应该有任何"阻塞")。
为了简单起见,Keystone Checkbox字段类型不支持DB字段本身为空,尽管它确实给了你一些选项来控制GraphQL类型的空性,即:graphql.read.isNonNull
和graphql.create.isNonNull
。这允许这样的用例:由于访问控制,一个值可能作为null
返回,或者作为null
传递给创建,但由于默认值或正在配置的钩子而保存一个值。