Field Validation in Schemas - Setting Validation: False On A Document Or A String Field

5 replies
Last updated: Jun 16, 2020
Hi,In relation to field validation in schemas the documentation says "Sometimes you can set 
validation: false
 on a document or a field to disable it.".I tried that on a document and on a string field without luck.
The expected behaviour is that the field becomes disabled, i.e. that data in the field is not editable, right? The documentation also says "sometimes", so maybe it just does not apply to document or a string field?
AI Update

I can see there's some confusion here! The phrase "Sometimes you can set validation: false on a document or a field to disable it" doesn't mean it will disable editing of the field. That documentation is talking about disabling validation rules, not disabling the field itself.

Setting validation: false simply means the field won't have any validation rules applied to it - the field will still be fully editable, it just won't require any specific format, won't be required, etc.

If you want to make a field non-editable, you need to use the readOnly property instead:

{
  name: 'myField',
  type: 'string',
  readOnly: true
}

You can also make fields conditionally read-only based on document state:

{
  name: 'myField',
  type: 'string',
  readOnly: ({document}) => document?.isPublished === true
}

Similarly, if you want to hide a field entirely (rather than just making it read-only), use the hidden property:

{
  name: 'myField',
  type: 'string',
  hidden: true
}

Or conditionally:

{
  name: 'myField',
  type: 'string',
  hidden: ({parent, document}) => !document?.showAdvancedFields
}

The readOnly and hidden properties work on any field type including strings, and they can be applied at both the field level. Both properties support conditional logic using callback functions that receive parent, document, value, and currentUser as parameters.

So to summarize:

  • validation: false = no validation rules (field is still editable)
  • readOnly: true = field is visible but not editable
  • hidden: true = field is not visible in the Studio
Hi Louise, I can see how that phrasing is confusing. Will make a note to adapt it. To disable a field and ensure the data is not editable, you can set
readOnly: true
instead 🙂
Ahh, so validation: false just disables the validation then? (actually it seems obvious now that I read it again 😄) But isn't validation also disabled by just not defining the validation parameter?
Thanks for the readOnly tip
Indeed, it usually is, but some fields may have default validation (e.g.
slug
) that you can disable this way, hence it only being ‘sometimes’. At least that’s my theory. Could use clearer wording though 🙂
Ok, that makes sense, thanks for helping!

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Was this answer helpful?