It’s actually the less-clumsy of the two options.
See the code in the thread at django custom form - removing fields based on user for a sample implementation. (You don’t need to pay a lot of attention to the text, you’re primarily interested in the code.)