How to automatically "transfer" keyword arguments from a component structure to the constructor of the wrapping object?

I have a struct (let’s say Model) where I would like to logically divide the fields in two different objects (lets’s say optionsa and optionsb) but I want to keep this division transparent to the user so that it can just call the main structure using keyword arguments of the two wrapped structures. Of course, I could write a custom constructor with all the fields of the wrapped structs, but I wonder if there is a way to do it automatically.

For example:

Base.@kwdef mutable struct OptionsA
    option1a::Int64 = 0
    option2a::String = "foo"
end
Base.@kwdef mutable struct OptionsB
    option1b::Int64 = 1
    option2b::String = "boo"
end

mutable struct Model
    optionsa::OptionsA 
    optionsb::OptionsB 
    otherstuff
end

# User should be able to do any of the following:
Model()
Model(option1a=1)
Model(option1a=1,option2b="zzz")
...

This seems to work:

function Model(;kwargs...)
    m              = Model(OptionsA(),OptionsB(),nothing)
    thisobjfields  = fieldnames(typeof(m))
    for (kw,kwv) in kwargs
       for f in thisobjfields
          fobj = getproperty(m,f)
          if kw in fieldnames(typeof(fobj))
              setproperty!(fobj,kw,kwv)
          end
        end
    end
    return m
end