CINXE.COM
<!doctype html><html lang="en" class="lightTheme"><head><meta charSet="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><script defer src="https://assets.canny.io/ec90bcfe25a8a715819eab92899a8b80f930d2ca/SubdomainBundle.js"></script><link href="https://assets.canny.io/ec90bcfe25a8a715819eab92899a8b80f930d2ca/SubdomainBundle.css" media="screen, projection" rel="stylesheet" type="text/css"/><title data-rh="true">Field type "Computed" | Voters | Strapi</title><meta data-rh="true" name="twitter:site" content="@cannyHQ"/><meta data-rh="true" name="description" content="It would be great to be able to add a field that returns a value computed from the other fields without having to create a custom controller and a custom route."/><meta data-rh="true" property="og:description" content="It would be great to be able to add a field that returns a value computed from the other fields without having to create a custom controller and a custom route."/><meta data-rh="true" property="og:image" content="https://strapi.canny.io/api/og/posts/626b1a79a52459027fdc0642?v=MjAyNS0wMS0yNFQyMjowNzowNS4yMzBa"/><meta data-rh="true" property="og:title" content="Field type "Computed" | Feature Requests | Strapi"/><meta data-rh="true" name="twitter:description" content="It would be great to be able to add a field that returns a value computed from the other fields without having to create a custom controller and a custom route."/><meta data-rh="true" name="twitter:image" content="https://strapi.canny.io/api/og/posts/626b1a79a52459027fdc0642?v=MjAyNS0wMS0yNFQyMjowNzowNS4yMzBa"/><meta data-rh="true" name="twitter:title" content="Field type "Computed" | Feature Requests | Strapi"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" property="fb:app_id" content="1606018679610384"/><meta data-rh="true" name="google-site-verification" content="hutYg6OBDqx9fLFmeEqY4o0gjWPw2rkFt3-Sp2wbMQc"/><link data-rh="true" href="https://widget.intercom.io" rel="preconnect"/><link data-rh="true" href="https://js.intercomcdn.com" rel="preconnect"/><link data-rh="true" href="https://api-iam.intercom.io" rel="preconnect"/><link data-rh="true" href="https://canny-assets.io/icons/a89a07311f28f26319bfef2cc7d20c08.png" rel="icon"/><link data-rh="true" href="https://canny-assets.io/icons/c10da7fa9b0d090bab66799c326e1c91.png" rel="apple-touch-icon"/><link data-rh="true" href="https://feedback.strapi.io/feature-requests/p/field-type-computed" rel="canonical"/></head><body class="prelod"><div data-iframe-height="true" id="content"><div><div class="subdomainContainer"><div class="modalContainer"><div class="toastContainer"><div class="publicContainer"><div class="publicNav"><div class="contentContainer"><div class="contentInnerContainer"><div class="publicNavContent"><div class="mainNav"><a class="company" href="/"><div class="logoContainer"><div class="companyLogo"><img fetchpriority="auto" alt="Strapi logo" src="https://canny-assets.io/icons/c10da7fa9b0d090bab66799c326e1c91.png"/></div><div class="companyName">Strapi</div></div></a><div class="rightContainer"><a style="background:#4945ff" class="createLink" href="/feature-requests/create"><span class="icon icon-pencil"></span><div class="uppercaseHeader">Create</div></a><div class="authButtons"><button class="buttonV2 primary medium outlined" type="button"><span class="buttonLabel">Log in</span></button><button class="buttonV2 primary medium contained" type="button"><span class="buttonLabel">Sign up</span></button></div></div></div><div class="secondaryNav"><a class="link roadmap" href="/"><span class="subdomainHomeIcons rotate"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-map subdomainHomeIcon"><polygon points="3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"></polygon><line x1="9" x2="9" y1="3" y2="18"></line><line x1="15" x2="15" y1="6" y2="21"></line></svg></span><div class="text">Roadmap</div></a><a style="border-bottom-color:#4945ff" class="link feedback hideOnMobile" href="/feature-requests"><span class="subdomainHomeIcons"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb subdomainHomeIcon" style="stroke:#4945ff"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg></span><div class="text" style="color:#4945ff">Feedback</div></a><div class="link boards hide" style="border-bottom-color:#4945ff"><span class="subdomainHomeIcons"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lightbulb subdomainHomeIcon" style="stroke:#4945ff"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"></path><path d="M9 18h6"></path><path d="M10 22h4"></path></svg></span><div class="publicNavBoardDropdown"><div class="dropdownContainer controlled"><div class="selection split"><a style="color:#4945ff" class="option" href="/feature-requests"><div class="optionContent"><div>Feature Requests</div><div class="uppercaseHeader count">382</div></div></a><div class="icon-chevron-down"></div></div></div></div></div></div></div></div></div></div><div class="subdomainPost"><div class="contentContainer"><div class="contentInnerContainer"><div class="subdomainSidebarContainer"><div class="sidebarContainer"><div class="sidebar"><div class="sidebarSection"><div class="voters"><div class="uppercaseHeader">Voters</div><div class="subdomainPostVoters"><div class="users"><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">Adriano Cahete</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="missingAvatar" style="color:var(--grass-110);background-color:var(--grass-40)">L</div></div></div><div class="userInfo"><span class="name">Laurens Kling</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">A.A</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">Florent Catiau-Tristant</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="missingAvatar" style="color:var(--violet-110);background-color:var(--violet-40)">a</div></div></div><div class="userInfo"><span class="name">avkluchko</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="missingAvatar" style="color:var(--mint-110);background-color:var(--mint-40)">d</div></div></div><div class="userInfo"><span class="name">dave.bubenik@gmail.com</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">wtf</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="missingAvatar" style="color:var(--teal-110);background-color:var(--teal-40)">m</div></div></div><div class="userInfo"><span class="name">michael ataklt</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">Niklas</span></div></div></div></div></div><div class="voter"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">sven westerlaken</span></div></div></div></div></div></div><a style="color:#4945ff" class="more" href="/feature-requests/p/field-type-computed/voters">and 15 more...</a></div></div></div></div><div class="cannyAttribution desktopOnly"><div class="firstLine"><a href="https://canny.io/powered-by-canny?utm_source=feedback_subdomain&utm_medium=powered&utm_campaign=strapi&company=Strapi" rel="noopener" target="_blank" class="attribution">Powered by Canny</a></div></div></div><div class="mainContainer"><div class="postContainer"><div class="post"><div class="mainContent"><div class="headerContainer"><div class="postHeader"><button class="postVotesV2"><div class="background"></div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-up chevron"><path d="m18 15-6-6-6 6"></path></svg><span class="score">25</span></button><div class="statusTitle"><div class="postTitle">Field type "Computed"</div></div></div></div><div class="postContent"><div class="postAuthor"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="missingAvatar" style="color:var(--violet-110);background-color:var(--violet-40)">A</div></div></div><div class="userInfo"><span class="name">Arthur Fontaine</span></div></div></div></div><div class="postBody"><div class="details"><div class="markdown"><div class="line">It would be great to be able to add a field that returns a value computed from the other fields without having to create a custom controller and a custom route.</div></div></div></div><div class="postMenu"><a target="_blank" class="postLink timestampLink" href="/feature-requests/p/field-type-computed"><time class="timestamp" dateTime="2022-04-28T22:51:37.071Z">April 28, 2022</time></a></div></div><div class="commentComposer"><form class="composerForm fileForm"><div class="mentionsTextarea"><div class="textareaWithHighlights"><div class="backdrop"><div class="highlights"><mark></mark></div></div><div class="autoResizeTextarea" style="height:38px"><span class="inputContainer"><textarea autoComplete="off" placeholder="Leave a comment" rows="1"></textarea></span></div></div></div></form></div></div><div class="postActivity"><div class="activityList"><div class="comment"><div class="topContainer"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">Steve Chen</span></div></div></div></div><div class="right"></div></div><div class="bottomContainer"><div class="commentBody"><div class="value"><div class="markdown"><div class="line">Before we get this, you can use life cycles.</div><div class="line">Add a lifecycles.js in your class folder with code like this:</div><div class="line">module.exports = {</div><div class="line">beforeCreate(event) {</div><div class="line">grade = <a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.grade;</div><div class="line">level = <a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.level;</div><div class="line"><a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.class_name = <div class="inlineCodeBlock">G${grade} ${level} </div>;</div><div class="line">},</div><div class="line">beforeUpdate(event) {</div><div class="line">grade = <a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.grade;</div><div class="line">level = <a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.level;</div><div class="line"><a rel="ugc nofollow noopener" href="http://event.params.data" target="_blank" style="color:#4945ff" class="">event.params.data</a>.class_name = <div class="inlineCodeBlock">G${grade} ${level} </div>;</div><div class="line">},</div><div class="line">};</div></div></div></div><div class="commentMenu"><div class="menu"><div class="reactionsMenuContainer"><div class="reactionsMenu"><div class="reaction"><button class="reactionButton"><div class="reactionComponentContainer"><svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 1C8.35 1 7 2.42751 7 4.17224C7 2.42751 5.65 1 4 1C2.35 1 1 2.42751 1 4.17224C1 4.80669 1.1875 5.44114 1.4875 5.91698C2.0125 6.74969 7 11.6667 7 11.6667C7 11.6667 11.95 6.78934 12.475 5.95663C12.8125 5.44114 13 4.84635 13 4.17224C13 2.42751 11.65 1 10 1Z" stroke="var(--gray-90)" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"></path></svg><p class="textV2 reactionCount bodyMd regular-weight"></p></div></button></div></div></div><div class="middot">·</div><div class="menuTimestamp"><time class="timestamp" dateTime="2023-01-24T16:22:14.992Z">January 24, 2023</time></div><div class="middot">·</div><div class="reply">Reply</div></div></div></div><div class="replies"><div class="comment"><div class="topContainer"><div class="left"><div class="userLockupContainer"><div class="userLockup"><div class="userAvatarContainer"><div class="userAvatar"><div class="avatarContainer"><div class="loading"></div></div></div></div><div class="userInfo"><span class="name">Florent Catiau-Tristant</span></div></div></div></div><div class="right"></div></div><div class="bottomContainer"><div class="commentBody"><div class="value"><div class="markdown"><div class="line"><span class="mention" style="background-color:rgba(73,69,255, 0.15)">Steve Chen</span> To complete your answer, this is what I did in the meantime the feature gets prioritized:</div><ul class=""><li class="">Create a new field in my entity as usual. Make it <div class="inlineCodeBlock">required</div>, and possibly <div class="inlineCodeBlock">private</div> if you don't need it to be returned by the api.</li><li class="">Add the lifecycle hooks to automatically update its value based on other entity attributes.</li><li class="">On the Strapi interface, update the "Configuration View" and make that field <div class="italics">not editable</div>, so that nobody can manually updates this attribute's value from the UI.</li></ul><div class="line">Works like a charm for my use case :)</div></div></div></div><div class="commentMenu"><div class="menu"><div class="reactionsMenuContainer"><div class="reactionsMenu"><div class="reaction"><button class="reactionButton"><div class="reactionComponentContainer"><svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 1C8.35 1 7 2.42751 7 4.17224C7 2.42751 5.65 1 4 1C2.35 1 1 2.42751 1 4.17224C1 4.80669 1.1875 5.44114 1.4875 5.91698C2.0125 6.74969 7 11.6667 7 11.6667C7 11.6667 11.95 6.78934 12.475 5.95663C12.8125 5.44114 13 4.84635 13 4.17224C13 2.42751 11.65 1 10 1Z" stroke="var(--gray-90)" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"></path></svg><p class="textV2 reactionCount bodyMd regular-weight"></p></div></button></div></div></div><div class="middot">·</div><div class="menuTimestamp"><time class="timestamp" dateTime="2024-09-03T15:30:25.209Z">September 3, 2024</time></div><div class="middot">·</div><div class="reply">Reply</div></div></div></div></div></div></div></div></div></div></div><div class="cannyAttribution mobileOnly"><div class="firstLine"><a href="https://canny.io/powered-by-canny?utm_source=feedback_subdomain&utm_medium=powered&utm_campaign=strapi&company=Strapi" rel="noopener" target="_blank" class="attribution">Powered by Canny</a></div></div></div></div></div></div></div></div></div></div><iframe width="0" height="0" id="canny-product-seen-frame" sandbox="allow-same-origin allow-scripts" scrolling="no" src="https://product-seen.canny.io/product-seen.html" style="border:0;display:none"></iframe><div id="fb-root"></div></div></div></div><script>window.__data = {"actionItemQueries":{"count":0,"postActionsCount":0,"draftActionsCount":0,"draftActionsCountPerSource":{},"updatedAt":null,"items":{},"queries":{}},"asanaSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"asanaTaskSuggestions":{},"automations":{"error":null,"lastUpdated":null,"loading":true,"data":null},"autopilotCounts":{"error":null,"lastUpdated":null,"loading":true,"data":null},"azureDevopsSettings":null,"azureDevopsWorkItemSuggestions":{},"boards":{"allLoaded":true,"allLoading":false,"error":null,"items":{"customization":{"_id":"6137b82c9feae77a40da0ce4","activePostCount":151,"postCount":170,"urlName":"customization","name":"Content Editing XP","created":"2021-09-07T19:06:20.483Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":false,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"👉 Let us know more about the problem it would solve by describing as much as possible the use case ","detailsField":"Details","detailsPlaceholder":"Insert how would this help a user's problem","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"boardFields":[],"categories":[],"uncategorized":{"subscribed":false},"translation":{"language":"en","strings":{}}},"developer-experience":{"_id":"6137b8420e9e821bdf031dd7","activePostCount":110,"postCount":123,"urlName":"developer-experience","name":"Developer Experience","created":"2021-09-07T19:06:42.513Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":false,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"boardFields":[],"categories":[{"_id":"635bf3ac54d0d145100aea4b","created":"2022-10-28T15:22:20.266Z","index":0,"name":"Dynamic Applications","parentID":null,"postCount":8,"urlName":"dynamic-applications","translation":{"language":"en","strings":{}}}],"uncategorized":{"subscribed":false},"translation":{"language":"en","strings":{}}},"documentation":{"_id":"6137bef7277d3f5e2499cfea","activePostCount":33,"postCount":35,"urlName":"documentation","name":"Documentation","created":"2021-09-07T19:35:19.746Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":true,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"boardFields":[],"categories":[{"_id":"6137c0a16ef1490755e0a6f1","created":"2021-09-07T19:42:25.297Z","name":"Developer Docs","parentID":null,"postCount":27,"urlName":"developer-docs","translation":{"language":"en","strings":{}}},{"_id":"6137c0a765a92726bfbca325","created":"2021-09-07T19:42:31.528Z","name":"User Guide","parentID":null,"postCount":4,"urlName":"user-guide","translation":{"language":"en","strings":{}}},{"_id":"6137c0ac7d76d05f1ef9858e","created":"2021-09-07T19:42:36.958Z","name":"Resource Center","parentID":null,"postCount":1,"urlName":"resource-center","translation":{"language":"en","strings":{}}}],"uncategorized":{"subscribed":false},"translation":{"language":"en","strings":{}}},"feature-requests":{"_id":"6179767c0178b95c34c70015","activePostCount":382,"postCount":400,"urlName":"feature-requests","name":"Feature Requests","created":"2021-10-27T15:55:40.138Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":true,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"boardFields":[],"categories":[],"uncategorized":{"subscribed":false},"translation":{"language":"en","strings":{}}},"cloud":{"_id":"6137b8144ac867740fa46ccc","activePostCount":18,"postCount":30,"urlName":"cloud","name":"Strapi Cloud","created":"2021-09-07T19:05:56.565Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":false,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"boardFields":[],"categories":[],"uncategorized":{"subscribed":false},"translation":{"language":"en","strings":{}}},"plugin-requests":{"_id":"61ddc0fc3f733345a8172cff","activePostCount":250,"postCount":262,"urlName":"plugin-requests","name":"Plugin Requests","created":"2022-01-11T17:40:12.961Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":true,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"categories":[],"uncategorized":{"subscribed":false},"boardFields":[],"translation":{"language":"en","strings":{}}},"security":{"_id":"6137b81c02e22c01a93b25cb","activePostCount":17,"postCount":19,"urlName":"security","name":"Security","created":"2021-09-07T19:06:04.609Z","settings":{"access":"public","allowIdentified":false,"detailsRequired":false,"domain":null,"indexed":true,"privateAuthors":false,"privateVotes":false,"segmentURLName":null,"showCreateForm":true,"showVoterNames":false,"verifiedBy":"email"},"strings":{"createCTA":"Create Post","createHeading":"Create a Post","description":"","detailsField":"Details","detailsPlaceholder":"Any additional details…","formCTA":"Share your feedback...","titleField":"Title","titlePlaceholder":"Short, descriptive title","translation":{"language":"en","strings":{}}},"categories":[{"_id":"6137c0fe0e9e821bdf03546a","created":"2021-09-07T19:43:58.387Z","name":"Authentication (Logins)","parentID":null,"postCount":10,"urlName":"authentication-logins","translation":{"language":"en","strings":{}}},{"_id":"6137c10d23d1881bed19a423","created":"2021-09-07T19:44:13.412Z","name":"Permissions System","parentID":null,"postCount":4,"urlName":"permissions-system","translation":{"language":"en","strings":{}}}],"uncategorized":{"subscribed":false},"boardFields":[],"translation":{"language":"en","strings":{}}}},"lastUpdated":1740559912944},"changelog":null,"changelogEntries":{},"changelogEntryQueries":{},"clickupRules":null,"clickupTaskSuggestions":{},"company":{"error":null,"lastUpdated":1740559912887,"loading":false,"notFound":false,"_id":"60df9525a0120a64742b512b","authRedirectEnabled":false,"boardCount":7,"creatorID":"6076fa6ee326c327f6cdc318","faviconURL":"https:\u002F\u002Fcanny-assets.io\u002Ficons\u002Fa89a07311f28f26319bfef2cc7d20c08.png","logoURL":"https:\u002F\u002Fcanny-assets.io\u002Ficons\u002Fc10da7fa9b0d090bab66799c326e1c91.png","tintColor":"#4945ff","name":"Strapi","subdomain":"strapi","created":"2021-07-02T22:37:25.027Z","__v":0,"ogImageURL":"https:\u002F\u002Fcanny-assets.io\u002Fimages\u002Fog\u002F60df9525a0120a64742b512b\u002F973254248.jpeg","updatedAt":"2025-02-20T20:18:22.852Z","enableGlobalPostSearch":true,"enableTranslations":true,"authRedirectURL":"","showChangelog":true,"showRoadmap":true,"theme":"light","forcedMemberAuthMechanism":null,"viewerIsMember":false,"viewerHasThirdPartyMemberships":false,"azure":null,"changelog":{"allowIdentified":false,"domains":["strapi.io"],"enableEmailSubscriptions":false,"private":true,"viewerHasAccess":false,"hasPublishedEntries":false},"primaryDomain":"feedback.strapi.io","statuses":[{"_id":"6194db0cfdece21ce286aa24","createdBy":null,"showInPublicRoadmap":false,"color":"#a6a6a6","companyID":"60df9525a0120a64742b512b","name":"open","order":0,"type":"Initial","urlName":"open","created":"2021-11-17T10:35:56.175Z","__v":0,"translation":{"language":"en","strings":{}}},{"_id":"6194db0cfdece21ce286aa25","createdBy":null,"showInPublicRoadmap":false,"color":"#85b5b5","companyID":"60df9525a0120a64742b512b","name":"candidate","order":1,"type":"Active","urlName":"candidate","created":"2021-11-17T10:35:56.176Z","__v":0,"translation":{"language":"en","strings":{}}},{"_id":"6194db0cfdece21ce286aa26","createdBy":null,"showInPublicRoadmap":true,"color":"#1fa0ff","companyID":"60df9525a0120a64742b512b","name":"planned","order":2,"type":"Active","urlName":"planned","created":"2021-11-17T10:35:56.176Z","__v":0,"translation":{"language":"en","strings":{}}},{"_id":"6194db0cfdece21ce286aa27","createdBy":null,"showInPublicRoadmap":true,"color":"#c17aff","companyID":"60df9525a0120a64742b512b","name":"in progress","order":3,"type":"Active","urlName":"in-progress","created":"2021-11-17T10:35:56.176Z","__v":0,"translation":{"language":"en","strings":{}}},{"_id":"6194db0cfdece21ce286aa28","createdBy":null,"showInPublicRoadmap":true,"color":"#6cd345","companyID":"60df9525a0120a64742b512b","name":"complete","order":4,"type":"Complete","urlName":"complete","created":"2021-11-17T10:35:56.176Z","__v":0,"translation":{"language":"en","strings":{}}},{"_id":"6194db0cfdece21ce286aa5c","createdBy":null,"showInPublicRoadmap":false,"color":"#ed2b2b","companyID":"60df9525a0120a64742b512b","name":"closed","order":5,"type":"Closed","urlName":"closed","created":"2021-11-17T10:35:56.293Z","__v":0,"translation":{"language":"en","strings":{}}}],"gaPropertyID":"G-26RRSW4MNF","featureAllowlist":["atlas-search"],"features":{"adminRoles":true,"advancedAnalytics":false,"categories":true,"customEmailDomain":false,"customStatuses":true,"disableUserSubmissions":true,"internalComments":true,"liveSupport":true,"postETAs":true,"postOwners":true,"prioritizationRoadmap":true,"privateBoards":true,"privateChangelog":true,"privateComments":true,"removeBranding":false,"tags":true,"unlistedBoards":true,"userProfiles":true,"userSegmentation":true,"customDomain":true,"customPostFields":true,"exportComments":false,"postAutomation":true,"commentSearch":true,"moderationTools":true,"customRoles":false,"autoResponse":true,"privateVotes":true,"voteWeights":true,"summarizeComments":true,"privateAuthors":true,"translateContent":true,"shareRoadmaps":true,"changelogEmailSubscriptions":true,"deduplication":true,"supportExtraction":true,"reviewSources":true,"customAccess":true,"fileAttachments":true,"knowledgeHub":true},"privateDomains":[],"okta":null,"oidc":null,"autopilot":{"additionalCredits":0,"additionalCreditLimit":0,"additionalCreditsDisabled":false,"creditLimit":500,"creditsPerPurchase":100,"planLimit":500,"resets":"2025-03-08T12:00:00.000Z","unlimitedAdditionalCredits":false,"usedCredits":0},"billingData":{"status":"active","isFree":false},"members":[{"_id":"6076ebe0b4d0a10cea20f17d","lastSeen":"2023-10-10T07:38:19.465Z","roleID":"60df9525a0120a64742b5132"},{"_id":"6076fa6ee326c327f6cdc318","lastSeen":"2025-02-13T22:14:40.528Z","roleID":"60df9525a0120a64742b5130"},{"_id":"6079a22c517c44720be71b63","lastSeen":"2024-10-15T09:35:44.892Z","roleID":"60df9525a0120a64742b5132"},{"_id":"60870852506ebc2a01dddb3b","lastSeen":"2025-01-28T15:11:37.980Z","roleID":"60df9525a0120a64742b5132"},{"_id":"608848bfd458b64227b11a52","lastSeen":"2024-09-30T12:03:50.687Z","roleID":"60df9525a0120a64742b5130"},{"_id":"609e3e9b6196347f985ff355","roleID":"60df9525a0120a64742b5132"},{"_id":"6126a70e9ca7ae1738782f59","lastSeen":"2025-02-25T16:54:28.977Z","roleID":"60df9525a0120a64742b5130"},{"_id":"612f45ffb919006116d2d3f2","lastSeen":"2024-11-28T10:45:47.815Z","roleID":"60df9525a0120a64742b5132"},{"_id":"61fbc2c95371b31e0e6622ed","lastSeen":"2025-02-12T15:05:41.991Z","roleID":"60df9525a0120a64742b5131"},{"_id":"642efad70201c009ca7dc133","lastSeen":"2025-01-28T10:06:33.160Z","roleID":"60df9525a0120a64742b5132"},{"_id":"6463d45f648848092129a27c","lastSeen":"2025-02-12T13:50:11.837Z","roleID":"60df9525a0120a64742b5132"},{"_id":"64e630126c0865e4a12d4831","lastSeen":"2025-02-12T15:09:09.135Z","roleID":"60df9525a0120a64742b5131"}]},"cookies":{"__canny__browserTheme":undefined,"__canny__experimentID":undefined,"__canny__locale":undefined,"omitNonEssentialCookies":undefined,"__canny__requestID":"f8e78c01-827f-ac18-ed2e-545eac75de91","__host":"feedback.strapi.io"},"customFields":null,"customPostFields":{"error":null,"lastUpdated":null,"loading":true,"data":null},"dashboardActivity":null,"discordSettings":null,"freshdeskSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"githubIssueSuggestions":{},"gongSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"groups":{"error":null,"lastUpdated":null,"loading":true,"data":null},"gsuiteGroups":null,"helpscoutSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"ideaFields":{"error":null,"lastUpdated":null,"loading":true,"data":null},"ideaQueries":{},"inboxItemQueries":{},"issueSuggestions":{},"jiraRules":{"error":null,"lastUpdated":null,"loading":true,"data":null},"linearIssueSuggestions":{},"linearSettings":null,"mentionSuggestions":{},"notifications":{"error":null,"lastUpdated":1740559912861,"loading":false,"loadingMore":false,"count":0,"hasNextPage":false,"items":[],"lastUpdate":1740559912888,"pages":1},"postDraft":{},"posts":{"6179767c0178b95c34c70015":{"field-type-computed":{"error":null,"lastUpdated":1740559913047,"loading":false,"notFound":false,"_id":"626b1a79a52459027fdc0642","authorID":"61ec7e7f3aa7806cfd43e373","byID":null,"categoryID":null,"commentCount":2,"details":"It would be great to be able to add a field that returns a value computed from the other fields without having to create a custom controller and a custom route.","eta":null,"etaPublic":true,"imageURLs":[],"maxScore":25,"score":25,"status":"open","subCategoryID":null,"boardID":"6179767c0178b95c34c70015","companyID":"60df9525a0120a64742b512b","title":"Field type \"Computed\"","trendingScore":2873.2747668577254,"urlName":"field-type-computed","created":"2022-04-28T22:51:37.071Z","statusChanged":"2022-04-28T22:51:37.071Z","__v":0,"updatedAt":"2025-01-24T22:07:05.230Z","deletedAt":null,"ogImageURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002Fog\u002F60df9525a0120a64742b512b\u002Fposts\u002F626b1a79a52459027fdc0642\u002F705711365.jpg","fileURLs":[],"viewerVote":0,"board":{"_id":"6179767c0178b95c34c70015","urlName":"feature-requests","name":"Feature Requests"},"linkedEntry":null,"category":null,"voters":[{"_id":"5d0c50f9cc4cc1600a86aa13","alias":"Relieved Gerbil","aliasID":"65c27e0ded6eefce4cfa0062","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002Fe1d44eef4b7dd26218f29d4800551654.jpg","name":"Adriano Cahete","urlName":"adriano-cahete","voteID":"67940f0949f71d913ed19870","companies":[]},{"_id":"617bc356052d0f7d1da2db5d","alias":"Vivacious Canidae","aliasID":"65c26dd5ed6eefce4c55b2af","anonymized":false,"avatarURL":null,"name":"Laurens Kling","urlName":"laurens-kling","voteID":"674706d9a367fa6392c7237c","companies":[]},{"_id":"6563a7c10baa25e70e353a62","alias":"Extra Mastodon","aliasID":"65c2848fed6eefce4cf762ed","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F598e5575df997d184661d729e278bdbe.jpg","name":"A.A","urlName":"aa-2566","voteID":"672efcd2c66e81bbd462f229","companies":[]},{"_id":"640721c2343a797584c891ce","alias":"Kobi Cuckoo","aliasID":"65c2727bed6eefce4c1bd3c6","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F4e2756f0f25f1196f71fffa5381641fb.jpg","name":"Florent Catiau-Tristant","urlName":"florent-catiau-tristant","voteID":"66d724b37d32abb6caae3fdb","companies":[]},{"_id":"60597ae5b9e6397f1aa5ab62","alias":"Agate Jay","aliasID":"65c2a714ed6eefce4c199c20","anonymized":false,"avatarURL":null,"name":"avkluchko","urlName":"4a45f6","voteID":"65d5dcb70129d7ae441c32fc","companies":[]},{"_id":"631ac033038da3520fdbf0ea","alias":"Marvellous Flyingfish","aliasID":"65c3edc0ed6eefce4cb136e9","anonymized":false,"avatarURL":null,"name":"dave.bubenik@gmail.com","urlName":"davebubenikgmailcom","voteID":"659c50f1b7f7f4d2278ea93e","companies":[]},{"_id":"652fd82ba682507c7d260334","alias":"Purple Barnacle","aliasID":"65c27f48ed6eefce4c28207e","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002Fcbfb1d499fb1a57cd99c95bb078eb2c6.png","name":"wtf","urlName":"wtf-54","voteID":"655d437bcebec437160ebff9","companies":[]},{"_id":"5f72363490e2e811be722c72","alias":"Plum Lamprey","aliasID":"65c3edc0ed6eefce4cb136f5","anonymized":false,"avatarURL":null,"name":"michael ataklt","urlName":"michael-ataklt","voteID":"64f24b9785240e092aabc670","companies":[]},{"_id":"6203d7dc5518aa446043aeb5","alias":"Umbral green Chipmunk","aliasID":"65c27248ed6eefce4c1360dc","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F7cfc68746bf0479cf447b0f29470278f.png","name":"Niklas","urlName":"niklas-135","voteID":"64c2ad584df4eb2206822d0a","companies":[]},{"_id":"637d72a832a6a153509d5b79","alias":"Flame Python","aliasID":"65c27183ed6eefce4cf2a5f2","anonymized":false,"avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002Fd29e17d9963d6bedfcce944b46bc3482.jpg","name":"sven westerlaken","urlName":"sven-westerlaken","voteID":"649a851e54ae4909c22c198f","companies":[]}],"author":{"_id":"61ec7e7f3aa7806cfd43e373","avatarURL":null,"created":"2022-01-22T22:00:31.991Z","name":"Arthur Fontaine","urlName":"test-5154","anonymized":false,"alias":"Exclusive Gayal","aliasID":"65c339d2ed6eefce4cefb38a","serviceAccount":false},"by":null,"files":[],"translation":{"language":"en","strings":{}},"voteSettings":{"highEngagement":true,"lowEngagement":false,"moderateEngagement":false,"votesHidden":false},"opportunities":[],"pinnedComment":null,"mergeCount":0,"viewerIsAuthor":false,"sourceFeatureExtractionItem":null}}},"postsActivity":{"626b1a79a52459027fdc0642":{"error":null,"lastUpdated":1740559913116,"loading":false,"notFound":false,"options":{"limit":10,"internalComments":"none","sort":"newest"},"activities":[{"created":"2023-01-24T16:22:14.992Z","id":"63d005b6492ff606023f96df","type":"comment"}],"comments":{"63d005b6492ff606023f96df":{"_id":"63d005b6492ff606023f96df","authorID":null,"deleted":false,"imageURLs":[],"internal":false,"mentionedUserIDs":null,"mergeID":null,"parentID":null,"pinned":false,"postDeleted":false,"spam":false,"statusChangeID":null,"value":"Before we get this, you can use life cycles.\n\nAdd a lifecycles.js in your class folder with code like this:\n\nmodule.exports = {\n\n beforeCreate(event) {\n\n grade = event.params.data.grade;\n\n level = event.params.data.level;\n\n event.params.data.class_name = `G${grade} ${level} `;\n\n },\n\n beforeUpdate(event) {\n\n grade = event.params.data.grade;\n\n level = event.params.data.level;\n\n event.params.data.class_name = `G${grade} ${level} `;\n\n },\n\n};","voteID":null,"boardID":"6179767c0178b95c34c70015","companyID":"60df9525a0120a64742b512b","postID":"626b1a79a52459027fdc0642","created":"2023-01-24T16:22:14.992Z","__v":0,"fileURLs":[],"private":false,"reactions":null,"viewerReactions":null,"files":[],"author":{"_id":"5ff8e2b70a2c944cec9719f7","avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F64d61bad97add9dc55d1d2b3b96dbc24.jpg","created":"2021-01-08T22:54:47.160Z","name":"Steve Chen","urlName":"steve-chen-3","anonymized":false,"alias":"Zircon blue Kingfisher","aliasID":"65c29897ed6eefce4cfdb61c","serviceAccount":false},"mentionedUsers":[],"sourceLink":null,"itemSourceType":null,"integrationSourceType":null,"translation":{"language":"en","strings":{}}},"66d72b917251b67159d64f54":{"_id":"66d72b917251b67159d64f54","aiGenerated":false,"authorID":null,"boardID":"6179767c0178b95c34c70015","companyID":"60df9525a0120a64742b512b","deleted":false,"fileURLs":[],"imageURLs":[],"internal":false,"mentionedUserIDs":null,"mergeID":null,"parentID":"63d005b6492ff606023f96df","pinned":false,"postDeleted":false,"postID":"626b1a79a52459027fdc0642","sourceFeatureExtractionItemID":null,"spam":false,"statusChangeID":null,"value":"@{5ff8e2b70a2c944cec9719f7|full_name} To complete your answer, this is what I did in the meantime the feature gets prioritized:\n\n- Create a new field in my entity as usual. Make it `required`, and possibly `private` if you don't need it to be returned by the api.\n\n- Add the lifecycle hooks to automatically update its value based on other entity attributes.\n\n- On the Strapi interface, update the \"Configuration View\" and make that field *not editable*, so that nobody can manually updates this attribute's value from the UI.\n\nWorks like a charm for my use case :)","voteID":null,"created":"2024-09-03T15:30:25.209Z","__v":0,"private":false,"reactions":null,"viewerReactions":null,"files":[],"author":{"_id":"640721c2343a797584c891ce","avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F4e2756f0f25f1196f71fffa5381641fb.jpg","created":"2023-03-07T11:36:34.320Z","name":"Florent Catiau-Tristant","urlName":"florent-catiau-tristant","anonymized":false,"alias":"Kobi Cuckoo","aliasID":"65c2727bed6eefce4c1bd3c6","serviceAccount":false},"mentionedUsers":[{"_id":"5ff8e2b70a2c944cec9719f7","avatarURL":"https:\u002F\u002Fcanny.io\u002Fimages\u002F64d61bad97add9dc55d1d2b3b96dbc24.jpg","created":"2021-01-08T22:54:47.160Z","name":"Steve Chen","urlName":"steve-chen-3","anonymized":false,"alias":"Zircon blue Kingfisher","aliasID":"65c29897ed6eefce4cfdb61c","serviceAccount":false}],"sourceLink":null,"itemSourceType":null,"integrationSourceType":null,"translation":{"language":"en","strings":{}}}},"hasMore":false,"mergedPosts":{},"statusHistories":{}}},"postQueries":{},"postSuggestions":{},"queueItemQueries":{"count":0,"postsCount":0,"draftsCount":0,"draftsCountPerSource":{},"updatedAt":null,"items":{},"queries":{}},"sharedRoadmap":null,"sharedRoadmapPosts":null,"reduxAsyncConnect":{"loaded":true,"loadState":{}},"referralSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"roadmap":null,"roadmaps":null,"roadmapPosts":{},"serverResponse":{},"thirdPartyCompanies":{},"thirdPartyCompanyFeatureRequestsQueries":{"updatedAt":null,"queries":{}},"tpcForFilters":{"companyNames":{},"accountOwnerNames":{},"queries":{},"lastUpdated":null},"thirdPartyCompanyPosts":{},"thirdPartyCompanyQueries":{},"tldvSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null},"userPosts":{},"userQueries":{},"users":{},"userReactions":{},"userSuggestions":{},"viewer":{"error":null,"lastUpdated":1740559912863,"loading":false,"loggedOut":true},"viewQueries":{},"voteQueries":{},"voters":{},"zoomSettings":{"error":null,"lastUpdated":null,"loading":true,"data":null}};</script><script>document.body.classList.remove('preload');</script></body></html>