Conditional Attributes for Django User based on Groups
<p>A given <code>user</code> can be in zero or more of the following categories:</p>

<ul>
<li><code>floor staff</code></li>
<li><code>managers</code></li>
<li><code>owners</code></li>
</ul>

<p>If the user is <code>floor staff</code> they require extra attributes (e.g. <code>seniority</code> and <code>staffType</code>).</p>

<p>My initial attempt looked something like this:</p>

<ul>
<li>Create a <code>Group</code> for each category (this seems to make sense since each type of user should have different permissions within the site)</li>
<li>Create a <code>FloorStaff</code> model with the required extra attributes and a 1-to-1 relationship with <code>User</code></li>
<li>Handle <code>User</code> creation and <code>FloorStaff</code> creation separately (i.e. using separate forms, accessed separately). The form to create <code>FloorStaff</code> adds the <code>User</code> to the <code>floor staff</code> group automatically.</li>
</ul>

<p>While this works, it is not the most intuitive way to add a new floor staff employee to the site. From a manager's perspective, filling out 2 forms to add one employee makes little sense. That is, if I hire someone new, I should be able to fill out a "new employee" form that includes adding said employee to the correct categor(y/ies) at the same time as adding their basic info, and, if that employee is to be <code>floor staff</code> then the extra attributes should be added as well.</p>

<p>I've been toying with creating a custom user model that includes the extra attributes, but this feels wrong given that not all <code>User</code>s are <code>FloorStaff</code>.</p>

<p>At this point all I can think to do is to build a custom view and HTML form, but that too seems to go against the Django way of thinking.</p>

<p>What is the most "Djangoific" way to do this?</p>