If a SiteTree model is related to another model with a has_many relation, it's easy to manage in the CMS: we override getCMSFields() in order to add a new ComplexTableField in a new Tab. This has been clearly documented.
However it is not clear to me how we should handle has_one relations. I know that in this situation, we can create a new DropdownField to choose an object (of class OtherModel) and place it in the FieldSet returned by getCMSFields. I tried this and it worked, but I found that the problem with this approach is that the object we want to relate to our SiteTree object must exist first. Hence, this approach forces the end user to use another tool (like ModelAdmin) to create its objects first, then go back to the SiteTree object edit form and select the right object. Doing that is not too complicated for me, but it is for our clients.
What I'd like to know is if Silverstripe provides a built-in solution for this problem. Such a solution could be, for example, a "create or select" field which would allow us to select a preexisting 'OtherModel' object in a DropdownField or to click a button to open a popup form to create a new 'OtherModel' object. I'd like to know if I have to create new subclasses, extend or modify Silverstripe to get a solution for my problem.