diff --git a/hackathon_site/event/jinja2/event/landing.html b/hackathon_site/event/jinja2/event/landing.html index 2df88b7f..9176b4b8 100644 --- a/hackathon_site/event/jinja2/event/landing.html +++ b/hackathon_site/event/jinja2/event/landing.html @@ -414,4 +414,4 @@

Contact Us

{% block scripts %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/hackathon_site/registration/forms.py b/hackathon_site/registration/forms.py index 0f28384e..e02557d2 100644 --- a/hackathon_site/registration/forms.py +++ b/hackathon_site/registration/forms.py @@ -122,10 +122,21 @@ class Meta: fields = [ "age", "pronouns", - "ethnicity", + "free_response_pronouns", + "gender", + "free_response_gender", + # "ethnicity", "phone_number", "city", "country", + "tshirt_size", + "dietary_restrictions", + "free_response_dietary_restrictions", + "under_represented_group", + "sexual_identity", + "free_response_sexual_identity", + "highest_formal_education", + "free_response_highest_formal_education", "school", "study_level", "graduation_year", @@ -134,9 +145,13 @@ class Meta: "linkedin", "github", "devpost", + "how_many_hackathons", + "past_hackathon_info", + "what_past_experience", "why_participate", "what_technical_experience", - "what_past_experience", + "what_role_in_team_setting", + "discovery_method", "conduct_agree", "logistics_agree", "email_agree", @@ -149,6 +164,36 @@ class Meta: choices=((None, ""),), ), "resume": MaterialFileInput(), + "free_response_pronouns": forms.Textarea( + attrs={"class": "materialize-textarea", "data-length": 200} + ), + "free_response_gender": forms.Textarea( + attrs={"class": "materialize-textarea", "data-length": 200} + ), + "free_response_sexual_identity": forms.Textarea( + attrs={"class": "materialize-textarea", "data-length": 200} + ), + "free_response_dietary_restrictions": forms.Textarea( + attrs={"class": "materialize-textarea", "data-length": 200} + ), + "free_response_highest_formal_education": forms.Textarea( + attrs={"class": "materialize-textarea", "data-length": 200} + ), + "past_hackathon_info": forms.Textarea( + attrs={ + "class": "materialize-textarea", + "placeholder": "Insert past hackathon description here...", + "data-length": 1000, + } + ), + "what_past_experience": forms.Textarea( + attrs={ + "class": "materialize-textarea", + "placeholder": "Insert answer here...", + "data-length": 1000, + "style": "padding-top: 38px;", + } + ), "why_participate": forms.Textarea( attrs={ "class": "materialize-textarea", @@ -159,14 +204,14 @@ class Meta: "what_technical_experience": forms.Textarea( attrs={ "class": "materialize-textarea", - "placeholder": "My technical experience with software are...", + "placeholder": "My technical experience with software and hardware are...", "data-length": 1000, } ), - "what_past_experience": forms.Textarea( + "what_role_in_team_setting": forms.Textarea( attrs={ "class": "materialize-textarea", - "placeholder": "My past experiences are...", + "placeholder": "I take on the role of...", "data-length": 1000, } ), @@ -192,6 +237,12 @@ def clean(self): raise forms.ValidationError( _("User has already submitted an application."), code="invalid" ) + self.clean_age() + self.handle_free_response_pronouns() + self.handle_free_response_gender() + self.handle_free_response_sexual_identity() + self.handle_free_response_dietary_restrictions() + self.handle_highest_formal_education() return cleaned_data def clean_age(self): @@ -206,6 +257,74 @@ def clean_age(self): ) return user_age + def handle_free_response_pronouns(self): + user_pronouns = self.cleaned_data["pronouns"] + user_free_response_pronouns = self.cleaned_data["free_response_pronouns"] + if user_pronouns == "other" and not user_free_response_pronouns: + raise forms.ValidationError( + _( + "Since you've selected 'Other' for pronouns, please state what pronouns you go by." + ), + code="free_response_pronouns", + ) + + def handle_free_response_gender(self): + user_gender = self.cleaned_data["gender"] + user_free_response_gender = self.cleaned_data["free_response_gender"] + if user_gender == "prefer-to-self-describe" and not user_free_response_gender: + raise forms.ValidationError( + _( + "Since you've selected 'Prefer to Self Describe' for gender, please state how you would like to be addressed" + ), + code="free_response_gender", + ) + + def handle_free_response_dietary_restrictions(self): + user_dietary_restrictions = self.cleaned_data["dietary_restrictions"] + user_free_response_dietary_restrictions = self.cleaned_data[ + "free_response_dietary_restrictions" + ] + if ( + user_dietary_restrictions == "allergies" + or user_dietary_restrictions == "other" + ) and not user_free_response_dietary_restrictions: + raise forms.ValidationError( + _("Please provide more information about your dietary restrictions."), + code="free_response_dietary_restrictions", + ) + + def handle_free_response_sexual_identity(self): + user_sexual_identity = self.cleaned_data["sexual_identity"] + user_free_response_sexual_identity = self.cleaned_data[ + "free_response_sexual_identity" + ] + if ( + user_sexual_identity == "different-identity" + and not user_free_response_sexual_identity + ): + raise forms.ValidationError( + _( + "You've selected 'Different Identity', please state how you would like to identify yourself" + ), + code="free_response_sexual_identity", + ) + + def handle_highest_formal_education(self): + user_highest_formal_education = self.cleaned_data["highest_formal_education"] + user_free_response_highest_formal_education = self.cleaned_data[ + "free_response_highest_formal_education" + ] + if ( + user_highest_formal_education == "other" + and not user_free_response_highest_formal_education + ): + raise forms.ValidationError( + _( + "You've selected 'Other' for highest formal education, please elaborate in the corresponding field." + ), + code="free_response_highest_formal_education", + ) + def save(self, commit=True): self.instance = super().save(commit=False) team = Team.objects.create() diff --git a/hackathon_site/registration/jinja2/registration/application.html b/hackathon_site/registration/jinja2/registration/application.html index f1df3acf..0a118cde 100644 --- a/hackathon_site/registration/jinja2/registration/application.html +++ b/hackathon_site/registration/jinja2/registration/application.html @@ -38,15 +38,26 @@

Personal Information

{{ render_field(form.age, size="s12 m6 select2-wrapper") }} {{ render_field(form.phone_number, size="s12 m6") }} {{ render_field(form.pronouns, size="s12 m6 select2-wrapper") }} - {{ render_field(form.ethnicity, size="s12 m6 select2-wrapper") }} + {{ render_field(form.free_response_pronouns, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.gender, size="s12 m6 select2-wrapper") }} + {{ render_field(form.free_response_gender, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.sexual_identity, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.free_response_sexual_identity, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {# {{ render_field(form.ethnicity, size="s12 m6 select2-wrapper") }}#} {{ render_field(form.city, size="s12 m6 select2-wrapper added-country-margin formAddTopMargin") }} {{ render_field(form.country, size="s12 m6 select2-wrapper added-country-margin formAddTopMargin") }} + {{ render_field(form.tshirt_size, size="s12 m6 select2-wrapper") }} + {{ render_field(form.under_represented_group, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.dietary_restrictions, size="s12 m6 select2-wrapper") }} + {{ render_field(form.free_response_dietary_restrictions, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.highest_formal_education, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} + {{ render_field(form.free_response_highest_formal_education, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }}

Education

{{ render_field(form.school, size="s12 m6 select2-wrapper") }} - {{ render_field(form.study_level, size="s12 m6 select2-wrapper") }} + {{ render_field(form.study_level, show_help_text_as_label=True, size="s12 m6 select2-wrapper") }} {{ render_field(form.graduation_year, size="s12 m6 select2-wrapper") }} {{ render_field(form.program, size="s12 m6 select2-wrapper", show_help_text_as_label=True) }} @@ -61,9 +72,13 @@

Online Profiles

Questions

+ {{ render_field(form.how_many_hackathons, show_help_text_as_label=True, size="s12 select2-wrapper") }} + {{ render_field(form.past_hackathon_info, show_help_text_as_label=True) }} + {{ render_field(form.what_past_experience, show_help_text_as_label=True) }} {{ render_field(form.why_participate, show_help_text_as_label=True) }} {{ render_field(form.what_technical_experience, show_help_text_as_label=True) }} - {{ render_field(form.what_past_experience, show_help_text_as_label=True) }} + {{ render_field(form.what_role_in_team_setting, show_help_text_as_label=True) }} + {{ render_field(form.discovery_method, show_help_text_as_label=True, size="s12 select2-wrapper") }}

We are currently in the process of partnering with MLH. The following 3 checkboxes are for this partnership. If we do not end up partnering with MLH, your information will not be shared.

@@ -78,10 +93,11 @@

Questions

{% block form_button %}
-

You cannot edit this afterwards!

+

Please note: After submission, you will no longer be able to edit your answers!


-

At present, this submission is intended for preregistration. Rest assured, we will notify you via email as soon as official registration becomes available. -

+

For the long answer questions, we recommended writing your answer in a separate document first, then pasting it into the form.

+{#

At present, this submission is intended for preregistration. Rest assured, we will notify you via email as soon as official registration becomes available.#} +{#

#}
@@ -127,6 +143,7 @@

Questions

e.stopPropagation(); }); }); + $("#id_free_response_pronouns, #id_free_response_gender, #id_free_response_sexual_identity, #id_free_response_dietary_restrictions, #id_free_response_highest_formal_education, #id_what_role_in_team_setting, #id_past_hackathon_info, #id_what_hackathon_experience, #id_why_participate, #id_what_technical_experience").characterCounter(); // TODO: TEMPORARY LINE // on first focus (bubbles up to document), open the menu // https://stackoverflow.com/a/49261426/3882202 diff --git a/hackathon_site/registration/migrations/0009_auto_20240925_2109.py b/hackathon_site/registration/migrations/0009_auto_20240925_2109.py new file mode 100644 index 00000000..7f2d5b43 --- /dev/null +++ b/hackathon_site/registration/migrations/0009_auto_20240925_2109.py @@ -0,0 +1,310 @@ +# Generated by Django 3.2.15 on 2024-09-26 01:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [("registration", "0008_revert_0007_changes")] + + operations = [ + migrations.AddField( + model_name="application", + name="dietary_restrictions", + field=models.CharField( + choices=[ + (None, ""), + ("none", "None"), + ("halal", "Halal"), + ("vegetarian", "Vegetarian"), + ("vegan", "Vegan"), + ("celiac-disease", "Celiac Disease"), + ("allergies", "Allergies"), + ("kosher", "Kosher"), + ("gluten-free", "Gluten Free"), + ("other", "Other"), + ], + default="", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="discovery_method", + field=models.TextField( + choices=[ + (None, ""), + ("instagram", "Instagram"), + ("in class/from a professor", "In Class/From a professor"), + ("discord", "Discord"), + ("email", "Email"), + ("from a friend", "From a friend"), + ("other", "Other"), + ], + default="", + help_text="How did you hear about NewHacks?", + max_length=100, + ), + ), + migrations.AddField( + model_name="application", + name="free_response_dietary_restrictions", + field=models.TextField( + blank=True, + default="", + help_text="If you selected 'Allergies' or 'Other', please specify.", + max_length=200, + null=True, + ), + ), + migrations.AddField( + model_name="application", + name="free_response_gender", + field=models.TextField( + blank=True, + default="", + help_text="If you selected 'Prefer to Self-Describe', please specify.", + max_length=200, + null=True, + ), + ), + migrations.AddField( + model_name="application", + name="free_response_highest_formal_education", + field=models.TextField( + blank=True, + default="", + help_text="If you selected 'Other' for education, please specify.", + max_length=200, + null=True, + ), + ), + migrations.AddField( + model_name="application", + name="free_response_pronouns", + field=models.TextField( + blank=True, + default="", + help_text="If selected 'Other', please specify", + max_length=200, + null=True, + ), + ), + migrations.AddField( + model_name="application", + name="free_response_sexual_identity", + field=models.TextField( + blank=True, + default="", + help_text="If you selected 'Different Identity', please specify.", + max_length=200, + null=True, + ), + ), + migrations.AddField( + model_name="application", + name="gender", + field=models.CharField( + choices=[ + (None, ""), + ("man", "Man"), + ("woman", "Woman"), + ("non-binary", "Non-Binary"), + ("prefer-to-self-describe", "Prefer to Self-Describe"), + ("prefer-to-not-answer", "Prefer to not Answer"), + ], + default="", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="highest_formal_education", + field=models.CharField( + choices=[ + (None, ""), + ( + "less-than-secondary-or-high-school", + "Less than Secondary / High School", + ), + ("secondary-or-high-school", "Secondary / High School"), + ( + "post-secondary-2-years", + "2 year Undergraduate University or community college program", + ), + ( + "post-secondary-3-or-more-years", + "3+ year Undergraduate University program", + ), + ( + "graduate-university", + "Graduate University (Masters, Professional, Doctoral, etc)", + ), + ("code-school-or-bootcamp", "Code School / Bootcamp"), + ( + "vocational-or-trades-or-apprenticeship", + "Other Vocational or Trade Program or Apprenticeship", + ), + ("other", "Other"), + ("prefer-to-not-answer", "Prefer to not answer"), + ], + default="", + help_text="What is your highest level of education completed?", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="how_many_hackathons", + field=models.TextField( + choices=[ + (None, ""), + ("0", "0"), + ("1", "1"), + ("2", "2"), + ("3", "3"), + ("4", "4"), + ("5 or more", "5 or more"), + ], + default="", + help_text="How many hackathons have you been to?", + max_length=100, + ), + ), + migrations.AddField( + model_name="application", + name="past_hackathon_info", + field=models.TextField( + default="", + help_text="If you've been to prior hackathon(s), please indicate the hackathon name, your project name and any prizes you won.", + max_length=1000, + ), + ), + migrations.AddField( + model_name="application", + name="sexual_identity", + field=models.CharField( + choices=[ + (None, ""), + ("heterosexual-or-straight", "Heterosexual or straight"), + ("gay-or-lesbian", "Gay or lesbian"), + ("bisexual", "Bisexual"), + ("different-identity", "Different Identity"), + ("prefer-to-not-answer", "Prefer to not Answer"), + ], + default="", + help_text="Do you consider yourself to be any of the following?", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="tshirt_size", + field=models.CharField( + choices=[(None, ""), ("S", "S"), ("M", "M"), ("L", "L"), ("XL", "XL")], + default="", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="under_represented_group", + field=models.CharField( + choices=[ + (None, ""), + ("yes", "Yes"), + ("no", "No"), + ("unsure", "Unsure"), + ], + default="", + help_text="Are you in an underrepresented group in tech?", + max_length=50, + ), + ), + migrations.AddField( + model_name="application", + name="what_role_in_team_setting", + field=models.TextField( + default="", + help_text="What role do you typically take on in a team setting? Give an example of how you contributed to team success.", + max_length=1000, + ), + ), + migrations.AlterField( + model_name="application", + name="ethnicity", + field=models.CharField( + blank=True, + choices=[ + (None, ""), + ("american-native", "American Indian or Alaskan Native"), + ("asian-pacific-islander", "Asian / Pacific Islander"), + ("black-african-american", "Black or African American"), + ("hispanic", "Hispanic"), + ("caucasian", "White / Caucasian"), + ("other", "Multiple ethnicity / Other"), + ("no-answer", "Prefer not to answer"), + ], + default="", + max_length=50, + ), + ), + migrations.AlterField( + model_name="application", + name="pronouns", + field=models.CharField( + choices=[ + (None, ""), + ("he-him", "he/him"), + ("he-they", "he/they"), + ("she-her", "she/her"), + ("she-they", "she/they"), + ("they-them", "they/them"), + ("other", "other"), + ("no-answer", "prefer not to answer"), + ], + default="", + max_length=50, + ), + ), + migrations.AlterField( + model_name="application", + name="study_level", + field=models.CharField( + choices=[ + (None, ""), + ( + "post-secondary-2-years", + "2 year Undergraduate University or community college program", + ), + ( + "post-secondary-3-or-more-years", + "3+ year Undergraduate University program", + ), + ( + "graduate", + "Graduate University (Masters, Professional, Doctoral, etc)", + ), + ("other", "Other"), + ], + help_text="Current level of study", + max_length=50, + ), + ), + migrations.AlterField( + model_name="application", + name="what_past_experience", + field=models.TextField( + help_text="If you’ve been to a hackathon, what is your most memorable moment or challenge you faced? How did you overcome it? If not, what excites you most about attending your first hackathon and what do you hope to achieve and experience?", + max_length=1000, + ), + ), + migrations.AlterField( + model_name="application", + name="what_technical_experience", + field=models.TextField( + help_text="What is your technical experience with software and hardware?", + max_length=1000, + ), + ), + ] diff --git a/hackathon_site/registration/models.py b/hackathon_site/registration/models.py index 46472007..14a987aa 100644 --- a/hackathon_site/registration/models.py +++ b/hackathon_site/registration/models.py @@ -31,11 +31,21 @@ class Application(models.Model): PRONOUN_CHOICES = [ (None, ""), ("he-him", "he/him"), + ("he-they", "he/they"), ("she-her", "she/her"), + ("she-they", "she/they"), ("they-them", "they/them"), ("other", "other"), ("no-answer", "prefer not to answer"), ] + GENDER_CHOICES = [ + (None, ""), + ("man", "Man"), + ("woman", "Woman"), + ("non-binary", "Non-Binary"), + ("prefer-to-self-describe", "Prefer to Self-Describe"), + ("prefer-to-not-answer", "Prefer to not Answer"), + ] ETHNICITY_CHOICES = [ (None, ""), @@ -48,22 +58,80 @@ class Application(models.Model): ("no-answer", "Prefer not to answer"), ] + TSHIRT_SIZE_CHOICES = [(None, ""), ("S", "S"), ("M", "M"), ("L", "L"), ("XL", "XL")] + + DIETARY_RESTRICTIONS_CHOICES = [ + (None, ""), + ("none", "None"), + ("halal", "Halal"), + ("vegetarian", "Vegetarian"), + ("vegan", "Vegan"), + ("celiac-disease", "Celiac Disease"), + ("allergies", "Allergies"), + ("kosher", "Kosher"), + ("gluten-free", "Gluten Free"), + ("other", "Other"), + ] + + UNDER_REPRESENTED_GROUP_CHOICES = [ + (None, ""), + ("yes", "Yes"), + ("no", "No"), + ("unsure", "Unsure"), + ] + + SEXUAL_IDENTITY_CHOICES = [ + (None, ""), + ("heterosexual-or-straight", "Heterosexual or straight"), + ("gay-or-lesbian", "Gay or lesbian"), + ("bisexual", "Bisexual"), + ("different-identity", "Different Identity"), + ("prefer-to-not-answer", "Prefer to not Answer"), + ] + + HIGHEST_FORMER_EDUCATION_CHOICES = [ + (None, ""), + ("less-than-secondary-or-high-school", "Less than Secondary / High School"), + ("secondary-or-high-school", "Secondary / High School"), + ( + "post-secondary-2-years", + "2 year Undergraduate University or community college program", + ), + ("post-secondary-3-or-more-years", "3+ year Undergraduate University program"), + ( + "graduate-university", + "Graduate University (Masters, Professional, Doctoral, etc)", + ), + ("code-school-or-bootcamp", "Code School / Bootcamp"), + ( + "vocational-or-trades-or-apprenticeship", + "Other Vocational or Trade Program or Apprenticeship", + ), + ("other", "Other"), + ("prefer-to-not-answer", "Prefer to not answer"), + ] + STUDY_LEVEL_CHOICES = [ (None, ""), - ("less-than-secondary", "Less than Secondary / High School"), - ("secondary", "Secondary / High School"), + # ("less-than-secondary", "Less than Secondary / High School"), + # ("secondary", "Secondary / High School"), + # ( + # "undergraduate-2-year", + # "Undergraduate University (2 year - community college or similar)", + # ), + # ("undergraduate-3-year", "Undergraduate University (3+ year)"), ( - "undergraduate-2-year", - "Undergraduate University (2 year - community college or similar)", + "post-secondary-2-years", + "2 year Undergraduate University or community college program", ), - ("undergraduate-3-year", "Undergraduate University (3+ year)"), + ("post-secondary-3-or-more-years", "3+ year Undergraduate University program"), ("graduate", "Graduate University (Masters, Professional, Doctoral, etc)"), - ("code-school", "Code School / Bootcamp"), - ("vocational", "Other Vocational / Trade Program or Apprenticeship"), - ("post-doctorate", "Post Doctorate"), + # ("code-school", "Code School / Bootcamp"), + # ("vocational", "Other Vocational / Trade Program or Apprenticeship"), + # ("post-doctorate", "Post Doctorate"), ("other", "Other"), - ("not-a-student", "I’m not currently a student"), - ("no-answer", "Prefer not to answer"), + # ("not-a-student", "I’m not currently a student"), + # ("no-answer", "Prefer not to answer"), ] AGE_CHOICES = [ @@ -76,6 +144,25 @@ class Application(models.Model): (23, "22+"), ] + HACKATHON_NUMBER_CHOICES = [ + (None, ""), + ("0", "0"), + ("1", "1"), + ("2", "2"), + ("3", "3"), + ("4", "4"), + ("5 or more", "5 or more"), + ] + REFERRAL_CHOICES = [ + (None, ""), + ("instagram", "Instagram"), + ("in class/from a professor", "In Class/From a professor"), + ("discord", "Discord"), + ("email", "Email"), + ("from a friend", "From a friend"), + ("other", "Other"), + ] + user = models.OneToOneField(User, on_delete=models.CASCADE, null=False) team = models.ForeignKey( Team, related_name="applications", on_delete=models.CASCADE, null=False @@ -87,7 +174,28 @@ class Application(models.Model): pronouns = models.CharField( max_length=50, choices=PRONOUN_CHOICES, null=False, default="" ) - ethnicity = models.CharField(max_length=50, choices=ETHNICITY_CHOICES, null=False) + free_response_pronouns = models.TextField( + max_length=200, + null=True, + blank=True, + default="", + help_text="If selected 'Other', please specify", + ) + gender = models.CharField( + max_length=50, choices=GENDER_CHOICES, null=False, default="" + ) + + free_response_gender = models.TextField( + max_length=200, + null=True, + blank=True, + default="", + help_text="If you selected 'Prefer to Self-Describe', please specify.", + ) + ethnicity = models.CharField( + max_length=50, choices=ETHNICITY_CHOICES, null=False, blank=True, default="" + ) + phone_number = models.CharField( max_length=20, null=False, @@ -100,10 +208,67 @@ class Application(models.Model): ) city = models.CharField(max_length=255, null=False) country = models.CharField(max_length=255, null=False) - school = models.CharField(max_length=255, null=False,) + + tshirt_size = models.CharField( + max_length=50, choices=TSHIRT_SIZE_CHOICES, null=False, default="" + ) + + dietary_restrictions = models.CharField( + max_length=50, choices=DIETARY_RESTRICTIONS_CHOICES, null=False, default="" + ) + + free_response_dietary_restrictions = models.TextField( + max_length=200, + null=True, + blank=True, + default="", + help_text="If you selected 'Allergies' or 'Other', please specify.", + ) + + under_represented_group = models.CharField( + max_length=50, + choices=UNDER_REPRESENTED_GROUP_CHOICES, + null=False, + default="", + help_text="Are you in an underrepresented group in tech?", + ) + + sexual_identity = models.CharField( + max_length=50, + choices=SEXUAL_IDENTITY_CHOICES, + null=False, + default="", + help_text="Do you consider yourself to be any of the following?", + ) + + free_response_sexual_identity = models.TextField( + max_length=200, + null=True, + blank=True, + default="", + help_text="If you selected 'Different Identity', please specify.", + ) + + highest_formal_education = models.CharField( + max_length=50, + choices=HIGHEST_FORMER_EDUCATION_CHOICES, + null=False, + default="", + help_text="What is your highest level of education completed?", + ) + + free_response_highest_formal_education = models.TextField( + max_length=200, + null=True, + blank=True, + default="", + help_text="If you selected 'Other' for education, please specify.", + ) + + school = models.CharField(max_length=255, null=False) study_level = models.CharField( max_length=50, - help_text="Level of Study", + help_text="Current level of study", choices=STUDY_LEVEL_CHOICES, null=False, ) @@ -139,6 +304,24 @@ class Application(models.Model): devpost = models.URLField( max_length=200, help_text="Devpost Profile (Optional)", null=True, blank=True ) + how_many_hackathons = models.TextField( + null=False, + default="", + help_text="How many hackathons have you been to?", + choices=HACKATHON_NUMBER_CHOICES, + max_length=100, + ) + past_hackathon_info = models.TextField( + null=False, + default="", + help_text="If you've been to prior hackathon(s), please indicate the hackathon name, your project name and any prizes you won.", + max_length=1000, + ) + what_past_experience = models.TextField( + null=False, + help_text="If you’ve been to a hackathon, what is your most memorable moment or challenge you faced? How did you overcome it? If not, what excites you most about attending your first hackathon and what do you hope to achieve and experience?", + max_length=1000, + ) why_participate = models.TextField( null=False, help_text="Why do you want to participate in NewHacks?", @@ -146,14 +329,22 @@ class Application(models.Model): ) what_technical_experience = models.TextField( null=False, - help_text="What is your technical experience with software?", + help_text="What is your technical experience with software and hardware?", max_length=1000, ) - what_past_experience = models.TextField( + what_role_in_team_setting = models.TextField( null=False, - help_text="If you’ve been to a hackathon, briefly tell us your experience. If not, describe what you expect to see and experience.", + default="", + help_text="What role do you typically take on in a team setting? Give an example of how you contributed to team success.", max_length=1000, ) + discovery_method = models.TextField( + null=False, + default="", + help_text="How did you hear about NewHacks?", + choices=REFERRAL_CHOICES, + max_length=100, + ) conduct_agree = models.BooleanField( help_text="I have read and agree to the " 'MLH code of conduct.',