diff --git a/src/modules/settings/routes/data-model/field-detail/components/schema.vue b/src/modules/settings/routes/data-model/field-detail/components/schema.vue index 3bd9f26b32..595b1b975a 100644 --- a/src/modules/settings/routes/data-model/field-detail/components/schema.vue +++ b/src/modules/settings/routes/data-model/field-detail/components/schema.vue @@ -82,6 +82,11 @@ export default defineComponent({ const typesWithLabels = computed(() => types .filter((type) => { + // Only allow primary key types in m2o fields + if (props.type === 'm2o') { + return ['integer', 'string', 'uuid'].includes(type); + } + // Remove alias and unknown, as those aren't real column types you can use return ['alias', 'unknown'].includes(type) === false; }) @@ -94,7 +99,7 @@ export default defineComponent({ ); const typeDisabled = computed(() => { - return props.type !== 'standard'; + return ['file', 'files', 'o2m', 'm2m'].includes(props.type); }); return { _field, typesWithLabels, setType, typeDisabled }; diff --git a/src/modules/settings/routes/data-model/field-detail/field-detail.vue b/src/modules/settings/routes/data-model/field-detail/field-detail.vue index cee65f3f8f..0a87e52867 100644 --- a/src/modules/settings/routes/data-model/field-detail/field-detail.vue +++ b/src/modules/settings/routes/data-model/field-detail/field-detail.vue @@ -198,6 +198,25 @@ export default defineComponent({ ); } + if (props.type === 'm2o') { + relations.value = [ + { + collection_many: props.collection, + field_many: '', + primary_many: fieldsStore.getPrimaryKeyFieldForCollection(props.collection)?.field, + collection_one: '', + primary_one: fieldsStore.getPrimaryKeyFieldForCollection('directus_files')?.field, + }, + ]; + + watch( + () => fieldData.field, + () => { + relations.value[0].field_many = fieldData.field; + } + ); + } + return { fieldData, relations }; }