People¶
Part of the user manual. Related: PROJECTS · CONTACTS · ROLES · PERMISSIONS · VISIBILITY · ACTIONS · NOTIFICATIONS · COMPANIES.
The People tab on each project shows who's on the project — the
list of ProjectPeople rows for that project. It's where you
manage project membership: add or remove people, assign disciplines,
mark project admins and role leaders, edit underlying contacts.
This is a router page. The People tab surfaces concepts that live in their own docs — membership, disciplines, role flags, permissions, visibility. Use the table below to land in the right detailed doc for what you're trying to do.
TL;DR¶
- People =
ProjectPeoplerows for the active project. - Each row links a contact (from the directory) to this project
with a set of disciplines (roles), plus two flags:
project_adminandrole_leader. - Adding to the People tab requires the contact to already exist — see CONTACTS for creating contacts.
- Edit rights = project admin / superuser / row owner.
Tab columns¶
| Column | What it shows |
|---|---|
| Name | Contact's first_name last_name. From DirectoryContact. |
| Mobile | Phone (clickable tel: link). From the contact. |
Contact email (clickable mailto: link). When set, this address overrides the linked User's email for notification delivery — see CONTACTS § The email caveat for the resolution rules. |
|
| User | The linked login (Contact.site_login.username) — empty if the contact has no login. |
| Company | [CODE] Name of the contact's primary company. See COMPANIES. |
| Project Admin | Yes/No — the ProjectPeople.project_admin flag. |
| Role Leader | Yes/No — the ProjectPeople.role_leader flag. |
| Disciplines | Comma-separated discipline codes (e.g. ARC, MEC). The disciplines that grant workflow event visibility — see ROLES. |
| Actions | Kebab menu. See ACTIONS § Project People kebab. |
Default sort: by Company, then Name.
What do you want to do?¶
| Intent | Where to go |
|---|---|
| Understand who can see this project at all | VISIBILITY § layer 2 + PROJECTS § Project membership |
| Add a person to this project | Create the contact first (CONTACTS § Create a new contact); then add to project (PROJECTS § Adding / removing project membership). |
| Remove a person from this project | PROJECTS § Remove a contact from a project. Removes the ProjectPeople row only — the contact stays in the directory. |
| Change someone's disciplines (roles) | ROLES § Assign a discipline to a project member |
| Make someone a project admin | ROLES § Promote a member to project admin |
| Make someone a role leader | ROLES § Promote a member to role leader |
| Understand why someone sees / doesn't see a workflow event | VISIBILITY — the pipeline. Almost always layer 4 (ROLES) for "same project, one sees it and one doesn't." |
| Understand who gets emailed on a workflow transition | ROLES § Notifications and roles + NOTIFICATIONS. |
| Link a person to their login account | Edit their contact and set site_login — see CONTACTS § Link an existing contact to a login. |
| Edit the underlying contact | People kebab → Edit the Contact (see ACTIONS). Edits the contact at directory level; affects every project they're on. |
| See who has admin/leader/discipline X across this project | Use the per-column search row on the People table. Type a discipline code into the Disciplines column filter, or tick the Project Admin / Role Leader column filters. |
If your question isn't above, the topic almost certainly lives in ROLES or PROJECTS. Start there.
Tab-specific troubleshooting¶
These are issues you specifically hit on the People tab. For role / permission / visibility issues that aren't People-tab specific, see the troubleshooting tables in the cross-linked docs.
| Symptom | Likely cause | First check |
|---|---|---|
| Contact exists in the directory but doesn't appear in this project's People tab | They have no ProjectPeople row for this project — being in the directory ≠ being on a project |
Add via "Add Person" |
| Adding a person to the project — they show up here but workflow events still don't appear in their workflow view | They were added without any disciplines. Membership alone doesn't grant role-based event visibility | Edit their relationship → set disciplines. See ROLES |
| Discipline column blank for a row | The ProjectPeople has no disciplines assigned. Pure membership, no role-based visibility | Edit the relationship, add disciplines |
| Email column shows an address but the person says they don't get emails | Either (a) contact has no site_login (no User → no email at all), (b) linked user is is_active=False, or (c) the signal path doesn't pass contact=… so it falls back to user.email which may differ |
CONTACTS § The email caveat |
| User column blank for a row | Contact has no site_login — no login account linked |
Edit the contact → set site_login. See CONTACTS |
| Kebab is visually empty (no items) | You don't pass the edit_rel gate (not superuser, project admin, or row owner) |
Confirm your role in this project. See ACTIONS § Project People kebab |
| Edit Relationship form shows the disciplines I expect but visibility on events still wrong | Visibility ≠ membership ≠ roles. The 5-layer pipeline applies | VISIBILITY — walk the layers |
| Just promoted someone to project_admin — they still can't manage People | Project admin per-project. They're admin of THIS project; if they're trying to manage People on a DIFFERENT project, they need promotion there too | Confirm the project context |
| Same contact appears twice in the People tab | Two ProjectPeople rows for the same contact + project. Data anomaly |
Admin panel → delete one. Then audit how it happened |
For developers¶
This page is a router. Implementation pointers for the People tab specifically:
- Frontend table:
apps/directory/static/directory/js/app_people.js—peopleTableDataTable config + per-row render functions. - Models:
apps.projects.models.ProjectPeopleis the membership row. See model-level pointers in ROLES § For developers. - Endpoint:
/apps/projects/people/?project=<pk>— pinned to?limit=99999post-Phase-4 BYOP audit (perdevdocs/BYOP-PLAN.md). Currently a weak BYOP candidate; not yet chunked. - Add-Person form:
templates/default/projects/new_project_people.html project_people.htmlfor edit. Form fields come fromProjectPeopleSerializer.
See devdocs/ for codebase-level material.