Accounts

This module is used to maintain user accounts and profile information.

Models

class accounts.models.Officer(*args, **kwargs)[source]

Represents an Officer position

Parameters:
  • id (AutoField) – Id (required)
  • user (OneToOneField to User) – User
  • title (CharField) – Officer position (required)
  • img (OneToOneField to ProfilePhoto) – Img
exception DoesNotExist
exception MultipleObjectsReturned
id

AutoField(verbose_name=”ID”, primary_key=True, serialize=False, auto_created=True)

img

OneToOneField(blank=True, null=True, related_name=”officer_img”, on_delete=SET_NULL(), to= ProfilePhoto)

img_id

Raw (integer) FK for img

objects = <django.db.models.manager.Manager object>
title

CharField(verbose_name=”Officer Position”, max_length=60)

user

OneToOneField(blank=True, null=True, related_name=”exec_position”, on_delete=SET_NULL(), to= User)

user_id

Raw (integer) FK for user

class accounts.models.PhoneVerificationCode(*args, **kwargs)[source]

Used for temporarily saving the last code sent to a user to verify their phone number

Parameters:
  • id (AutoField) – Id (required)
  • user (OneToOneField to User) – User (required)
  • code (BigIntegerField) – Code (required)
  • timestamp (DateTimeField) – Timestamp (required)
exception DoesNotExist
exception MultipleObjectsReturned
code

BigIntegerField()

get_next_by_timestamp(*, field=<django.db.models.fields.DateTimeField: timestamp>, is_next=True, **kwargs)
get_previous_by_timestamp(*, field=<django.db.models.fields.DateTimeField: timestamp>, is_next=False, **kwargs)
id

AutoField(verbose_name=”ID”, primary_key=True, serialize=False, auto_created=True)

objects = <django.db.models.manager.Manager object>
timestamp

DateTimeField(auto_now_add=True)

user

OneToOneField(related_name=”verification_codes”, on_delete=CASCADE(), to= User)

user_id

Raw (integer) FK for user

class accounts.models.ProfilePhoto(*args, **kwargs)[source]

Officer profile photo

Parameters:
  • id (AutoField) – Id (required)
  • officer (OneToOneField to User) – Officer (required)
  • img (ImageField) – Image (required)
exception DoesNotExist
exception MultipleObjectsReturned
id

AutoField(verbose_name=”ID”, primary_key=True, serialize=False, auto_created=True)

img

Just like the FileDescriptor, but for ImageFields. The only difference is assigning the width/height to the width_field/height_field, if appropriate.

objects = <django.db.models.manager.Manager object>
officer

OneToOneField(related_name=”img”, on_delete=CASCADE(), to= User)

officer_id

Raw (integer) FK for officer

officer_img

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

class accounts.models.User(*args, **kwargs)[source]

Extended User Class

Parameters:
  • id (AutoField) – Id (required)
  • password (CharField) – Password (required)
  • last_login (DateTimeField) – Last login
  • is_superuser (BooleanField) – Designates that this user has all permissions without explicitly assigning them. (default=False)
  • username (CharField) – Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only. (required)
  • first_name (CharField) – First name (required)
  • last_name (CharField) – Last name (required)
  • email (EmailField) – Email address (required)
  • is_staff (BooleanField) – Designates whether the user can log into this admin site. (default=False)
  • is_active (BooleanField) – Designates whether this user should be treated as active. Unselect this instead of deleting accounts. (default=True)
  • date_joined (DateTimeField) – Date joined (default=<function now at 0x7f2af5e248c0>)
  • wpibox (IntegerField) – Wpi box number
  • phone (CharField) – Phone number
  • carrier (CharField) – By selecting your cellular carrier you consent to receiving text messages from LNL (default=)
  • addr (TextField) – Address / office location
  • mdc (CharField) – Mdc
  • nickname (CharField) – Nickname
  • student_id (PositiveIntegerField) – Student id
  • class_year (PositiveIntegerField) – Class year
  • locked (BooleanField) – Locked (default=False)
  • away_exp (DateField) – Away status expiration
  • onboarded (BooleanField) – Onboarding complete (default=False)
  • pronouns (CharField) – Pronouns
  • groups (ManyToManyField to Group) – The groups this user belongs to. A user will get all permissions granted to each of their groups. (required)
  • user_permissions (ManyToManyField to Permission) – Specific permissions for this user. (required)
exception DoesNotExist
exception MultipleObjectsReturned
addr

TextField(verbose_name=”Address / Office Location”, blank=True, null=True)

all_orgs

All organizations the user is associated with

auth_token

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

away_exp

DateField(verbose_name=”Away Status Expiration”, blank=True, null=True)

billingemail_set

Reverse Manager for events.BillingEmail’s email_to_users

carrier

CharField(verbose_name=”Cellular Carrier”, max_length=25, blank=True, null=True, default=””, choices=[(‘’, ‘Opt-out’), (‘txt.att.net’, ‘AT&T’), (‘myboostmobile.com’, ‘Boost Mobile’), (‘mms.cricketwireless.net’, ‘Cricket’), (‘msg.fi.google.com’, ‘Google Fi’), (‘mymetropcs.com’, ‘Metro PCS’), (‘mmst5.tracfone.com’, ‘Simple Mobile’), (‘messaging.sprintpcs.com’, ‘Sprint’), (‘tmomail.net’, ‘T-Mobile’), (‘vtext.com’, ‘Verizon’), (‘vmobl.com’, ‘Virgin Mobile’), (‘vmobile.ca’, ‘Virgin Mobile Canada’), (‘vtext.com’, ‘Xfinity Mobile’)], help_text=”By selecting your cellular carrier you consent to receiving text messages from LNL”)

Cellular carrier: By selecting your cellular carrier you consent to receiving text messages from LNL

ccinstances

Reverse Manager for events.EventCCInstance’s crew_chief

ccreport_set

Reverse Manager for events.CCReport’s crew_chief

ccreportreminders

Reverse Manager for events.ReportReminder’s crew_chief

class_year

PositiveIntegerField(blank=True, null=True, validators=[<django.core.validators.MinValueValidator object at 0x7f2af4952510>, <django.core.validators.MaxValueValidator object at 0x7f2af49524d0>])

connected_services

Reverse Manager for data.Extension’s users

contact

Reverse Manager for events.BaseEvent’s contact

crewchiefx

Reverse Manager for events.Event’s crew_chief

crewx

Reverse Manager for events.Event’s crew

equipmentmaintentry_set

Reverse Manager for inventory.EquipmentMaintEntry’s user

event_records

Reverse Manager for events.CrewAttendanceRecord’s user

eventapprovals

Reverse Manager for events.BaseEvent’s approved_by

eventbillingreview

Reverse Manager for events.BaseEvent’s reviewed_by

eventcancellations

Reverse Manager for events.BaseEvent’s cancelled_by

eventclosings

Reverse Manager for events.BaseEvent’s closed_by

exec_position

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

get_carrier_display(*, field=<django.db.models.fields.CharField: carrier>)
get_next_by_date_joined(*, field=<django.db.models.fields.DateTimeField: date_joined>, is_next=True, **kwargs)
get_previous_by_date_joined(*, field=<django.db.models.fields.DateTimeField: date_joined>, is_next=False, **kwargs)
group_str

Groups the user belongs to

groups

Reverse Manager for accounts.User’s groups

has_perm(perm, obj=None)[source]

Returns True if the user has the specified permission. This method queries all available auth backends, but returns immediately if any backend returns True. Thus, a user who has permission from a single auth backend is assumed to have permission in general. If an object is provided, permissions for this specific object are checked.

This differs from the default in that superusers, while still having every permission, will be allowed after the logic has executed. This helps with typos in permission strings.

hours

Reverse Manager for events.Hours’s user

id

AutoField(verbose_name=”ID”, primary_key=True, serialize=False, auto_created=True)

img

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

is_complete

Returns false if the user’s profile is incomplete. The user will be constantly reminded to complete their profile.

is_lnl

Is an LNL member

laptoppasswordretrieval_set

Reverse Manager for devices.LaptopPasswordRetrieval’s user

lnl_contact

Reverse Manager for events.BaseEvent’s lnl_contact

locked

BooleanField(default=False)

logentry_set

Reverse Manager for admin.LogEntry’s user

mdc

CharField(verbose_name=”MDC”, max_length=32, blank=True, null=True)

mdc_name
meeting_set

Reverse Manager for meetings.Meeting’s attendance

mtgattachment_set

Reverse Manager for meetings.MtgAttachment’s author

multibillingemail_set

Reverse Manager for events.MultiBillingEmail’s email_to_users

name

User’s full name

nickname

CharField(verbose_name=”Nickname”, max_length=32, blank=True, null=True)

officehour_set

Reverse Manager for events.OfficeHour’s officer

onboarded

BooleanField(verbose_name=”Onboarding Complete”, default=False)

onboardingrecord_set

Reverse Manager for pages.OnboardingRecord’s user

onboardingscreen_set

Reverse Manager for pages.OnboardingScreen’s users

orgowner

Reverse Manager for events.Organization’s user_in_charge

orgs

Organizations the user belongs to

orgusers

Reverse Manager for events.Organization’s associated_users

owns

Organizations the user owns

phone

CharField(verbose_name=”Phone Number”, max_length=24, blank=True, null=True)

preferences

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

projectionist

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

pronouns

CharField(verbose_name=”Pronouns”, max_length=32, blank=True, null=True)

revision_set

Reverse Manager for reversion.Revision’s user

save(*args, **kwargs)[source]

Save the current instance. Override this in a subclass if you want to control the saving process.

The ‘force_insert’ and ‘force_update’ parameters can be used to insist that the “save” must be an SQL insert or update (or equivalent for non-SQL backends), respectively. Normally, they should not be set.

smsmessage_set

Reverse Manager for emails.SMSMessage’s user

spotify_accounts

Reverse Manager for spotify.SpotifyUser’s user

student_id

PositiveIntegerField(verbose_name=”Student ID”, blank=True, null=True)

stupidcat_set

Reverse Manager for data.StupidCat’s user

submitter

Reverse Manager for events.BaseEvent’s submitted_by

surveys

Reverse Manager for events.PostEventSurvey’s person

token_requests

Reverse Manager for api.TokenRequest’s user

trainings

Reverse Manager for members.Trainee’s person

trainings_entered

Reverse Manager for members.Training’s recorded_by

trainings_revoked

Reverse Manager for members.Trainee’s revoked_by

trainings_run

Reverse Manager for members.Training’s trainer

user_permissions

Reverse Manager for accounts.User’s user_permissions

verification_codes

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

verification_events

Reverse Manager for events.OrgBillingVerificationEvent’s verified_by

workdayentries

Reverse Manager for events.Event2019’s workday_entered_by

wpibox

IntegerField(verbose_name=”WPI Box Number”, blank=True, null=True)

xfer_initiated

Reverse Manager for events.OrganizationTransfer’s initiator

xfer_new

Reverse Manager for events.OrganizationTransfer’s new_user_in_charge

xfer_old

Reverse Manager for events.OrganizationTransfer’s old_user_in_charge

class accounts.models.UserPreferences(*args, **kwargs)[source]

User-specific settings

Parameters:
  • id (AutoField) – Id (required)
  • user (OneToOneField to User) – User (required)
  • theme (CharField) – Theme (default=default)
  • rt_token (CharField) – Rt auth token
  • cc_add_subscriptions (MultiSelectField) – Cc add subscriptions (default=email)
  • cc_report_reminders (CharField) – Cc report reminders (default=email)
  • event_edited_notification_methods (CharField) – Event edited notification methods (default=email)
  • event_edited_field_subscriptions (MultiSelectField) – Event edited field subscriptions (default=[‘location’, ‘datetime_setup_complete’, ‘datetime_start’, ‘datetime_end’])
  • ignore_user_action (BooleanField) – Uncheck this to ignore notifications for actions triggered by the user (default=False)
  • meeting_invites (BooleanField) – Opt-in to receiving calendar invites for meetings (default=False)
  • meeting_invite_subscriptions (ManyToManyField to MeetingType) – Meeting invite subscriptions (required)
exception DoesNotExist
exception MultipleObjectsReturned
cc_add_subscriptions

CharField(max_length=11, blank=True, null=True, default=”email”, choices=[(‘email’, ‘Email’), (‘slack’, ‘Slack Notification’)])

cc_report_reminders

CharField(max_length=12, default=”email”, choices=[(‘email’, ‘Email’), (‘slack’, ‘Slack Notification’), (‘all’, ‘Both’)])

event_edited_field_subscriptions

CharField(max_length=149, default=[‘location’, ‘datetime_setup_complete’, ‘datetime_start’, ‘datetime_end’], choices=[(‘event_name’, ‘Event name’), (‘description’, ‘Description’), (‘location’, ‘Location’), (‘contact’, ‘Contact’), (‘lnl_contact’, ‘LNL contact’), (‘billing_org’, ‘Billing org’), (‘datetime_setup_complete’, ‘Datetime setup complete’), (‘datetime_start’, ‘Datetime start’), (‘datetime_end’, ‘Datetime end’), (‘internal_notes’, ‘Internal notes’), (‘billed_in_bulk’, ‘Billed in bulk’), (‘org’, ‘Client’)])

event_edited_notification_methods

CharField(max_length=12, default=”email”, choices=[(‘email’, ‘Email’), (‘slack’, ‘Slack Notification’), (‘all’, ‘Both’)])

get_cc_add_subscriptions_display()
get_cc_add_subscriptions_list()
get_cc_report_reminders_display(*, field=<django.db.models.fields.CharField: cc_report_reminders>)
get_event_edited_field_subscriptions_display()
get_event_edited_field_subscriptions_list()
get_event_edited_notification_methods_display(*, field=<django.db.models.fields.CharField: event_edited_notification_methods>)
get_theme_display(*, field=<django.db.models.fields.CharField: theme>)
id

AutoField(verbose_name=”ID”, primary_key=True, serialize=False, auto_created=True)

ignore_user_action

BooleanField(default=False, help_text=”Uncheck this to ignore notifications for actions triggered by the user”)

Ignore user action: Uncheck this to ignore notifications for actions triggered by the user

meeting_invite_subscriptions

Reverse Manager for accounts.UserPreferences’s meeting_invite_subscriptions

meeting_invites

BooleanField(default=False, help_text=”Opt-in to receiving calendar invites for meetings”)

Meeting invites: Opt-in to receiving calendar invites for meetings

objects = <django.db.models.manager.Manager object>
rt_token

CharField(verbose_name=”RT Auth Token”, max_length=256, blank=True, null=True)

theme

CharField(max_length=12, default=”default”, choices=[(‘default’, ‘Default’)])

user

OneToOneField(related_name=”preferences”, on_delete=CASCADE(), to= User)

user_id

Raw (integer) FK for user

accounts.models.officer_img_cleanup(sender, instance, **kwargs)[source]

When an instance of ProfilePhoto is deleted, delete the respective files as well.

Parameters:instance – A ProfilePhoto instance
accounts.models.path_and_rename(instance, filename)[source]

Determine path for storing officer headshots. Will rename with officer’s username.

Parameters:
  • instance – A ProfilePhoto instance
  • filename – The original name of the uploaded file
Returns:

New path to save file to


Views

class accounts.views.ActiveList(**kwargs)[source]

Lists active LNL members

accounts_disabled_column = False
name = 'Active List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.AllMembersList(**kwargs)[source]

Lists all LNL members

accounts_disabled_column = False
name = 'All Members List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.AlumniList(**kwargs)[source]

Lists LNL alumni

accounts_disabled_column = False
name = 'Alumni List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.AssociateList(**kwargs)[source]

Lists associate LNL members

accounts_disabled_column = False
name = 'Associate List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.AwayList(**kwargs)[source]

Lists LNL members on away status

accounts_disabled_column = False
name = 'Away List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.BaseUserList(**kwargs)[source]

Basic structure for user lists

context_object_name = 'users'
get_context_data(**kwargs)[source]

Get the context for this view.

model

alias of accounts.models.User

name = 'User List'
perms = ['accounts.view_user']
template_name = 'users.html'
class accounts.views.InactiveList(**kwargs)[source]

Lists inactive LNL members

accounts_disabled_column = True
name = 'Inactive List'
perms = ['accounts.view_member']
positions = False
queryset
class accounts.views.LimboList(**kwargs)[source]

Lists unassociated users

accounts_disabled_column = False
name = 'Users without Association'
positions = False
queryset
class accounts.views.MeDirectView(**kwargs)[source]

Redirects to a user’s profile page

get_redirect_url(*args, **kwargs)[source]

Return the URL redirect to. Keyword arguments from the URL pattern match generating the redirect request are provided as kwargs to this method.

class accounts.views.OfficerList(**kwargs)[source]

Lists LNL officers

accounts_disabled_column = False
name = 'Officer List'
perms = ['accounts.view_member']
positions = True
queryset
class accounts.views.PasswordSetView(**kwargs)[source]

Set a non-SSO login password

dispatch(request, pk, *args, **kwargs)[source]
form_valid(form)[source]

If the form is valid, redirect to the supplied URL.

get_context_data(**kwargs)[source]

Insert the form into the context dict.

get_form_class()[source]

Return the form class to use.

get_form_kwargs()[source]

Return the keyword arguments for instantiating the form.

get_success_url()[source]

Return the URL to redirect to after processing a valid form.

model

alias of accounts.models.User

msg = 'Set Non-SSO Login Password'
template_name = 'form_crispy.html'
user = None
class accounts.views.UserAddView(**kwargs)[source]

Add a new user manually (should rarely be used - LDAP does this for us)

form_class

alias of accounts.forms.UserAddForm

get_success_url()[source]

Return the URL to redirect to after processing a valid form.

model

alias of accounts.models.User

msg = 'Add User Manually'
perms = 'accounts.add_user'
template_name = 'form_crispy.html'
class accounts.views.UserDetailView(**kwargs)[source]

View user profile

get_context_data(**kwargs)[source]

Insert the single object into the context dict.

model

alias of accounts.models.User

perms = ['accounts.view_user']
slug_field = 'username'
slug_url_kwarg = 'username'
template_name = 'userdetail.html'
user_passes_test(request, *args, **kwargs)[source]
class accounts.views.UserUpdateView(**kwargs)[source]

Update user profile

form_class

alias of accounts.forms.UserEditForm

form_valid(form)[source]

If the form is valid, save the associated model.

get_context_data(**kwargs)[source]

Insert the form into the context dict.

get_success_url()[source]

Return the URL to redirect to after processing a valid form.

model

alias of accounts.models.User

perms = 'accounts.change_user'
slug_field = 'username'
slug_url_kwarg = 'username'
template_name = 'form_crispy_cbv.html'
user_passes_test(request, *args, **kwargs)[source]
accounts.views.application_scope_request(request)[source]

Prompt the user to allow applications connected to the LNLDB to interact with one another. Redirects to the application’s callback uri.

accounts.views.mdc(request)[source]

Displays a list of radio MDCs for LNL members

accounts.views.mdc_raw(request)[source]

Downloads a CSV file containing the radio MDCs of LNL members

accounts.views.officer_photos(request, pk=None)[source]

Update officer headshot (displayed on the main LNL website about page)

accounts.views.secretary_dashboard(request)[source]

Dashboard for the secretary. Lists important member counts used in voting and suggests users to activate, deactivate, associate, or take off away status.

accounts.views.shame(request)[source]

The LNL Crew Chief Report Hall of Shame. Tracks members who fail to complete event reports and lists the top 10 on a leaderboard.

accounts.views.smart_login(request)[source]

Intelligent signin handler. Presents the Sign in with Microsoft option if enabled. If already logged in, redirects to the requested page (can be used to check for an active session). Also checks for the Prefer SAML cookie and automatically attempts to log in via Microsoft SSO if present. Falls back on Django’s native login form otherwise.

accounts.views.user_preferences(request)[source]

Update a user’s account preferences (only visible to the user)


Forms

class accounts.forms.LoginForm(*args, **kwargs)[source]
base_fields = {'password': <django.forms.fields.CharField object>, 'username': <django.contrib.auth.forms.UsernameField object>}
declared_fields = {'password': <django.forms.fields.CharField object>, 'username': <django.contrib.auth.forms.UsernameField object>}
media
class accounts.forms.OfficerPhotoForm(*args, **kwargs)[source]
class Meta[source]
fields = ['img']
model

alias of accounts.models.ProfilePhoto

base_fields = {'img': <django.forms.fields.ImageField object>}
declared_fields = {}
media
class accounts.forms.SMSOptInForm(*args, **kwargs)[source]
class Meta[source]
fields = ('phone', 'carrier')
model

alias of accounts.models.User

base_fields = {'carrier': <django.forms.fields.ChoiceField object>, 'phone': <django.forms.fields.CharField object>}
declared_fields = {'carrier': <django.forms.fields.ChoiceField object>, 'phone': <django.forms.fields.CharField object>}
media
class accounts.forms.UserAddForm(*args, **kwargs)[source]
class Meta[source]
fields = ['username', 'email', 'first_name', 'last_name']
model

alias of accounts.models.User

base_fields = {'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.fields.CharField object>, 'last_name': <django.forms.fields.CharField object>, 'password1': <django.forms.fields.CharField object>, 'password2': <django.forms.fields.CharField object>, 'username': <django.forms.fields.CharField object>}
clean_password2()[source]
declared_fields = {'password1': <django.forms.fields.CharField object>, 'password2': <django.forms.fields.CharField object>}
error_messages = {'password_mismatch': "The two password fields didn't match."}
media
save(commit=True)[source]

Save this form’s self.instance object if commit=True. Otherwise, add a save_m2m() method to the form which can be called after the instance is saved manually at a later time. Return the model instance.

class accounts.forms.UserEditForm(*args, **kwargs)[source]
class FieldAccess[source]
edit_groups = <data.forms.FieldAccessLevel object>
edit_mdc = <data.forms.FieldAccessLevel object>
edit_student_id = <data.forms.FieldAccessLevel object>
hasperm = <data.forms.FieldAccessLevel object>
thisisme = <data.forms.FieldAccessLevel object>
unaffiliated = <data.forms.FieldAccessLevel object>
class Meta[source]
fields = ['username', 'email', 'first_name', 'last_name', 'nickname', 'pronouns', 'groups', 'addr', 'wpibox', 'mdc', 'phone', 'class_year', 'student_id', 'away_exp', 'carrier', 'title']
model

alias of accounts.models.User

base_fields = {'addr': <django.forms.fields.CharField object>, 'away_exp': <django.forms.fields.DateField object>, 'carrier': <django.forms.fields.TypedChoiceField object>, 'class_year': <django.forms.fields.IntegerField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.fields.CharField object>, 'groups': <django.forms.models.ModelMultipleChoiceField object>, 'last_name': <django.forms.fields.CharField object>, 'mdc': <django.forms.fields.CharField object>, 'nickname': <django.forms.fields.CharField object>, 'phone': <django.forms.fields.CharField object>, 'pronouns': <django.forms.fields.CharField object>, 'student_id': <django.forms.fields.IntegerField object>, 'title': <django.forms.models.ModelChoiceField object>, 'username': <django.forms.fields.CharField object>, 'wpibox': <django.forms.fields.IntegerField object>}
clean_student_id()[source]
declared_fields = {'title': <django.forms.models.ModelChoiceField object>}
media
save(commit=True)[source]

Save this form’s self.instance object if commit=True. Otherwise, add a save_m2m() method to the form which can be called after the instance is saved manually at a later time. Return the model instance.

class accounts.forms.UserPreferencesForm(*args, **kwargs)[source]
class Meta[source]
fields = ('theme', 'cc_add_subscriptions', 'cc_report_reminders', 'event_edited_notification_methods', 'event_edited_field_subscriptions', 'ignore_user_action', 'meeting_invites', 'meeting_invite_subscriptions')
layout = [('Text', '<div class="ui secondary segment"><h4 class="ui dividing header">Appearance</h4>'), ('Field', 'theme'), ('Text', '</div><div class="ui secondary segment nobullet"><h4 class="ui dividing header">Communications</h4><div class="ui styled accordion" style="width: 100%"><div class="title"><i class="dropdown icon"></i>LNL News</div><div class="content"><p class="ui help">General club information, advertisements and meeting notices. This content will typically be sent to the <em>lnl-news@wpi.edu</em> email alias. You may opt out of receiving these messages at any time through Outlook.</p>'), ('Text', '<a href="https://lnl.wpi.edu/legal/opt-out/" class="ui blue basic button">Opt out</a>'), ('Text', '</div><div class="title"><i class="dropdown icon"></i>Crew Chief Add Notifications</div><div class="content"><p class="ui help">Receive a notification whenever you are added as a Crew Chief for a new event.</p>'), ('Field', 'cc_add_subscriptions'), ('Text', '</div><div class="title"><i class="dropdown icon"></i>Crew Chief Report Reminders</div><div class="content"><p class="ui help">Receive reminders for missing crew chief reports.</p>'), ('Field', 'cc_report_reminders'), ('Text', '</div><div class="title"><i class="dropdown icon"></i>Crew Chief Needed Notifications</div><div class="content"><p class="ui help">Receive an alert whenever the VP needs crew chiefs to run an event.</p>'), ('Field', 'cc_needed_subscriptions'), ('Text', '</div><div class="title"><i class="dropdown icon"></i>Event Edit Notifications</div><div class="content"><p class="ui help">Receive alerts whenever details for an event you are involved with have changed.</p>'), ('Field', 'event_edited_notification_methods'), ('Text', '<br><hr style=\'border: 1px dashed gray\'><br><p class"ui help">Notify me of changes to any of the following fields:<br><br><span class="ui label">Location</span><span class="ui label">Event Setup Time</span><span class="ui label">Event Start</span><span class="ui label">Event End</span></p>'), ('Field', 'event_edited_field_subscriptions'), ('Text', '</div><div class="title"><i class="dropdown icon"></i>Web Service Notifications</div><div class="content"><p class="ui help">General account and system-wide notices. You may not unsubscribe from these messages.</p>'), ('Field', 'srv'), ('Text', '</div></div><br><div class="ui styled accordion" style="width: 100%"><div class="title"><i class="dropdown icon"></i>Calendar Invites - Meetings</div><div class="content">'), ('Field', 'meeting_invites'), ('Text', '<br><hr style=\'border: 1px dashed gray\'><p class"ui help">Automatically send me invites for the following types of meetings:<br>'), ('Field', 'meeting_invite_subscriptions'), ('Text', '</div></div><div class="ui segment">'), ('Field', 'ignore_user_action'), ('Text', '</div></div><div class="ui secondary segment"><h4 class="ui dividing header">Request Tracker</h4>'), ('Text', '<a href="/support/connect/rt/" class="ui green basic button">Connect Account</a>'), ('Text', '</div>')]
model

alias of accounts.models.UserPreferences

base_fields = {'cc_add_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'cc_needed_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'cc_report_reminders': <django.forms.fields.ChoiceField object>, 'event_edited_field_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'event_edited_notification_methods': <django.forms.fields.ChoiceField object>, 'ignore_user_action': <django.forms.fields.BooleanField object>, 'meeting_invite_subscriptions': <django.forms.models.ModelMultipleChoiceField object>, 'meeting_invites': <django.forms.fields.BooleanField object>, 'srv': <django.forms.fields.MultipleChoiceField object>, 'theme': <django.forms.fields.TypedChoiceField object>}
declared_fields = {'cc_add_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'cc_needed_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'cc_report_reminders': <django.forms.fields.ChoiceField object>, 'event_edited_field_subscriptions': <django.forms.fields.MultipleChoiceField object>, 'event_edited_notification_methods': <django.forms.fields.ChoiceField object>, 'ignore_user_action': <django.forms.fields.BooleanField object>, 'meeting_invite_subscriptions': <django.forms.models.ModelMultipleChoiceField object>, 'meeting_invites': <django.forms.fields.BooleanField object>, 'srv': <django.forms.fields.MultipleChoiceField object>}
media