from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) import random import numpy as np import json from psycopg2.extensions import register_adapter, AsIs def addapt_numpy_float64(numpy_float64): return AsIs(numpy_float64) def addapt_numpy_int64(numpy_int64): return AsIs(numpy_int64) def addapt_numpy_float32(numpy_float32): return AsIs(numpy_float32) def addapt_numpy_int32(numpy_int32): return AsIs(numpy_int32) def addapt_numpy_array(numpy_array): return AsIs(tuple(numpy_array)) register_adapter(np.float64, addapt_numpy_float64) register_adapter(np.int64, addapt_numpy_int64) register_adapter(np.float32, addapt_numpy_float32) register_adapter(np.int32, addapt_numpy_int32) register_adapter(np.ndarray, addapt_numpy_array) author = 'Marvin Peschka, Klara Schönenberger, Rahkakavee Baskaran' doc = """ Test experiment conducted by Center for Data and Methods: Ballotexperiment Participants: Students of the University of Konstanz Statistics Lecture 2nd semester 2021. """ from ballotexperiment.templates.ballotexperiment.ballot_groups import ballot_groups, random_number, round_orders, \ check_max, weighted_random_number class Constants(BaseConstants): name_in_url = 'survey_july21' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): def creating_session(self): for p in self.get_players(): p.ballot_group_number = ballot_groups(0) # rounds p.round_one, p.round_two, p.round_three = round_orders(0) # pages_sequence if p.round_one == 1: page_groups1_round1_A_ErstStimme = "groups1_round1_A_ErstStimme" page_groups1_round1_B_ZweitStimme = "groups1_round1_B_ZweitStimme" page_groups2_round1_A_ZweitStimme = "groups2_round1_A_ZweitStimme" page_groups2_round1_B_ErstStimme = "groups2_round1_B_ErstStimme" page_groups3_round1_ErstZweitStimme = "groups3_round1_ErstZweitStimme" if p.round_one == 2: page_groups1_round1_A_ErstStimme = "groups1_round2_A_ErstStimme" page_groups1_round1_B_ZweitStimme = "groups1_round2_B_ZweitStimme" page_groups2_round1_A_ZweitStimme = "groups2_round2_A_ZweitStimme" page_groups2_round1_B_ErstStimme = "groups2_round2_B_ErstStimme" page_groups3_round1_ErstZweitStimme = "groups3_round2_ErstZweitStimme" if p.round_one == 3: page_groups1_round1_A_ErstStimme = "groups1_round3_A_ErstStimme" page_groups1_round1_B_ZweitStimme = "groups1_round3_B_ZweitStimme" page_groups2_round1_A_ZweitStimme = "groups2_round3_A_ZweitStimme" page_groups2_round1_B_ErstStimme = "groups2_round3_B_ErstStimme" page_groups3_round1_ErstZweitStimme = "groups3_round3_ErstZweitStimme" if p.round_two == 1: page_groups1_round2_A_ErstStimme = "groups1_round1_A_ErstStimme" page_groups1_round2_B_ZweitStimme = "groups1_round1_B_ZweitStimme" page_groups2_round2_A_ZweitStimme = "groups2_round1_A_ZweitStimme" page_groups2_round2_B_ErstStimme = "groups2_round1_B_ErstStimme" page_groups3_round2_ErstZweitStimme = "groups3_round1_ErstZweitStimme" if p.round_two == 2: page_groups1_round2_A_ErstStimme = "groups1_round2_A_ErstStimme" page_groups1_round2_B_ZweitStimme = "groups1_round2_B_ZweitStimme" page_groups2_round2_A_ZweitStimme = "groups2_round2_A_ZweitStimme" page_groups2_round2_B_ErstStimme = "groups2_round2_B_ErstStimme" page_groups3_round2_ErstZweitStimme = "groups3_round2_ErstZweitStimme" if p.round_two == 3: page_groups1_round2_A_ErstStimme = "groups1_round3_A_ErstStimme" page_groups1_round2_B_ZweitStimme = "groups1_round3_B_ZweitStimme" page_groups2_round2_A_ZweitStimme = "groups2_round3_A_ZweitStimme" page_groups2_round2_B_ErstStimme = "groups2_round3_B_ErstStimme" page_groups3_round2_ErstZweitStimme = "groups3_round3_ErstZweitStimme" if p.round_three == 1: page_groups1_round3_A_ErstStimme = "groups1_round1_A_ErstStimme" page_groups1_round3_B_ZweitStimme = "groups1_round1_B_ZweitStimme" page_groups2_round3_A_ZweitStimme = "groups2_round1_A_ZweitStimme" page_groups2_round3_B_ErstStimme = "groups2_round1_B_ErstStimme" page_groups3_round3_ErstZweitStimme = "groups3_round1_ErstZweitStimme" if p.round_three == 2: page_groups1_round3_A_ErstStimme = "groups1_round2_A_ErstStimme" page_groups1_round3_B_ZweitStimme = "groups1_round2_B_ZweitStimme" page_groups2_round3_A_ZweitStimme = "groups2_round2_A_ZweitStimme" page_groups2_round3_B_ErstStimme = "groups2_round2_B_ErstStimme" page_groups3_round3_ErstZweitStimme = "groups3_round2_ErstZweitStimme" if p.round_three == 3: page_groups1_round3_A_ErstStimme = "groups1_round3_A_ErstStimme" page_groups1_round3_B_ZweitStimme = "groups1_round3_B_ZweitStimme" page_groups2_round3_A_ZweitStimme = "groups2_round3_A_ZweitStimme" page_groups2_round3_B_ErstStimme = "groups2_round3_B_ErstStimme" page_groups3_round3_ErstZweitStimme = "groups3_round3_ErstZweitStimme" # Create page_sequence p.page_sequence = json.dumps(["Welcome", "preparation", "ballot_preparation_round1", page_groups1_round1_A_ErstStimme, page_groups1_round1_B_ZweitStimme, page_groups2_round1_A_ZweitStimme, page_groups2_round1_B_ErstStimme, page_groups3_round1_ErstZweitStimme, "ballot_preparation_round2", page_groups1_round2_A_ErstStimme, page_groups1_round2_B_ZweitStimme, page_groups2_round2_A_ZweitStimme, page_groups2_round2_B_ErstStimme, page_groups3_round2_ErstZweitStimme, "ballot_preparation_round3", page_groups1_round3_A_ErstStimme, page_groups1_round3_B_ZweitStimme, page_groups2_round3_A_ZweitStimme, page_groups2_round3_B_ErstStimme, page_groups3_round3_ErstZweitStimme, "recall", "party_opinion", "politican_opinion", "political_questions", "education", "socio_demographic_2", "income", "Endpage"]) # Round1 p.randlastname_CDU_r1 = random_number(0, 39) p.randfirstname_CDU_r1 = random_number(0, 39) p.randlastname_SPD_r1 = random_number(0, 39) p.randfirstname_SPD_r1 = random_number(0, 39) p.randlastname_FDP_r1 = random_number(0, 39) p.randfirstname_FDP_r1 = random_number(0, 39) p.randlastname_AFD_r1 = random_number(0, 39) p.randfirstname_AFD_r1 = random_number(0, 39) p.randlastname_GRUENE_r1 = random_number(0, 39) p.randfirstname_GRUENE_r1 = random_number(0, 39) p.randlastname_LINKE_r1 = random_number(0, 39) p.randfirstname_LINKE_r1 = random_number(0, 39) p.incumbent_CDU_r1 = random_number(0, 1) p.incumbent_SPD_r1 = random_number(0, 1) p.incumbent_GRUENE_r1 = random_number(0, 9) p.incumbent_FDP_r1 = random_number(0, 9) p.incumbent_AFD_r1 = random_number(0, 9) p.incumbent_LINKE_r1 = random_number(0, 9) p.random_list_CDU_r1 = random_number(0, 1) p.random_list_SPD_r1 = random_number(0, 1) p.random_list_GRUENE_r1 = random_number(0, 1) p.random_list_FDP_r1 = random_number(0, 1) p.random_list_AFD_r1 = random_number(0, 1) p.random_list_LINKE_r1 = random_number(0, 1) # p.randdr_CDU_r1 = weighted_random_number([0,1],1, [0.80,0.20]) # p.randdr_SPD_r1 = weighted_random_number([0,1],1, [0.863,0.137]) # p.randdr_FDP_r1 = weighted_random_number([0,1],1, [0.86,0.14]) # p.randdr_AFD_r1 = weighted_random_number([0,1],1, [0.82,0.18]) # p.randdr_GRÜNE_r1 = weighted_random_number([0,1],1, [0.90,0.10]) # p.randdr_LINKE_r1 = weighted_random_number([0,1],1, [0.93, 0.07]) p.randdr_CDU_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) p.randdr_SPD_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) p.randdr_FDP_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) p.randdr_AFD_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) p.randdr_GRUENE_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) p.randdr_LINKE_r1 = weighted_random_number([0, 1], 1, [0.9, 0.1]) # check_maximum p.randdr_CDU_r1, p.randdr_SPD_r1, p.randdr_FDP_r1, p.randdr_AFD_r1, p.randdr_GRUENE_r1, p.randdr_LINKE_r1, p.flag_dr_r1 = check_max( p.randdr_CDU_r1, p.randdr_SPD_r1, p.randdr_FDP_r1, p.randdr_AFD_r1, p.randdr_GRUENE_r1, p.randdr_LINKE_r1, p.flag_dr_r1) # Round2 p.randlastname_CDU_r2 = random_number(0, 39) p.randfirstname_CDU_r2 = random_number(0, 39) p.randlastname_SPD_r2 = random_number(0, 39) p.randfirstname_SPD_r2 = random_number(0, 39) p.randlastname_FDP_r2 = random_number(0, 39) p.randfirstname_FDP_r2 = random_number(0, 39) p.randlastname_AFD_r2 = random_number(0, 39) p.randfirstname_AFD_r2 = random_number(0, 39) p.randlastname_GRUENE_r2 = random_number(0, 39) p.randfirstname_GRUENE_r2 = random_number(0, 39) p.randlastname_LINKE_r2 = random_number(0, 39) p.randfirstname_LINKE_r2 = random_number(0, 39) p.incumbent_CDU_r2 = random_number(0, 1) p.incumbent_SPD_r2 = random_number(0, 1) p.incumbent_GRUENE_r2 = random_number(0, 9) p.incumbent_FDP_r2 = random_number(0, 9) p.incumbent_AFD_r2 = random_number(0, 9) p.incumbent_LINKE_r2 = random_number(0, 9) p.random_federalstate_r2 = random_number(1, 17) p.random_list_CDU_r2 = random_number(0, 1) p.random_list_SPD_r2 = random_number(0, 1) p.random_list_GRUENE_r2 = random_number(0, 1) p.random_list_FDP_r2 = random_number(0, 1) p.random_list_AFD_r2 = random_number(0, 1) p.random_list_LINKE_r2 = random_number(0, 1) p.randdr_CDU_r2 = weighted_random_number([0, 1], 1, [0.80, 0.20]) # TODO p.randdr_SPD_r2 = weighted_random_number([0, 1], 1, [0.863, 0.137]) p.randdr_FDP_r2 = weighted_random_number([0, 1], 1, [0.86, 0.14]) p.randdr_AFD_r2 = weighted_random_number([0, 1], 1, [0.82, 0.18]) p.randdr_GRUENE_r2 = weighted_random_number([0, 1], 1, [0.90, 0.10]) p.randdr_LINKE_r2 = weighted_random_number([0, 1], 1, [0.93, 0.07]) # check_maximum p.randdr_CDU_r2, p.randdr_SPD_r2, p.randdr_FDP_r2, p.randdr_AFD_r2, p.randdr_GRUENE_r2, p.randdr_LINKE_r2, p.flag_dr_r2 = check_max( p.randdr_CDU_r2, p.randdr_SPD_r2, p.randdr_FDP_r2, p.randdr_AFD_r2, p.randdr_GRUENE_r2, p.randdr_LINKE_r2, p.flag_dr_r2) # Round3 p.randlastname_CDU_r3 = random_number(0, 39) p.randfirstname_CDU_r3 = random_number(0, 39) p.randlastname_SPD_r3 = random_number(0, 39) p.randfirstname_SPD_r3 = random_number(0, 39) p.randlastname_FDP_r3 = random_number(0, 39) p.randfirstname_FDP_r3 = random_number(0, 39) p.randlastname_AFD_r3 = random_number(0, 39) p.randfirstname_AFD_r3 = random_number(0, 39) p.randlastname_GRUENE_r3 = random_number(0, 39) p.randfirstname_GRUENE_r3 = random_number(0, 39) p.randlastname_LINKE_r3 = random_number(0, 39) p.randfirstname_LINKE_r3 = random_number(0, 39) p.incumbent_CDU_r3 = random_number(0, 1) p.incumbent_SPD_r3 = random_number(0, 1) p.incumbent_GRUENE_r3 = random_number(0, 9) p.incumbent_FDP_r3 = random_number(0, 9) p.incumbent_AFD_r3 = random_number(0, 9) p.incumbent_LINKE_r3 = random_number(0, 9) p.random_list_CDU_r3 = random_number(0, 1) p.random_list_SPD_r3 = random_number(0, 1) p.random_list_GRUENE_r3 = random_number(0, 1) p.random_list_FDP_r3 = random_number(0, 1) p.random_list_AFD_r3 = random_number(0, 1) p.random_list_LINKE_r3 = random_number(0, 1) p.randdr_CDU_r3 = weighted_random_number([0, 1], 1, [0.80, 0.20]) # TODO p.randdr_SPD_r3 = weighted_random_number([0, 1], 1, [0.863, 0.137]) p.randdr_FDP_r3 = weighted_random_number([0, 1], 1, [0.86, 0.14]) p.randdr_AFD_r3 = weighted_random_number([0, 1], 1, [0.82, 0.18]) p.randdr_GRUENE_r3 = weighted_random_number([0, 1], 1, [0.90, 0.10]) p.randdr_LINKE_r3 = weighted_random_number([0, 1], 1, [0.93, 0.07]) # check_maximum p.randdr_CDU_r3, p.randdr_SPD_r3, p.randdr_FDP_r3, p.randdr_AFD_r3, p.randdr_GRUENE_r3, p.randdr_LINKE_r3, p.flag_dr_r3 = check_max( p.randdr_CDU_r3, p.randdr_SPD_r3, p.randdr_FDP_r3, p.randdr_AFD_r3, p.randdr_GRUENE_r3, p.randdr_LINKE_r3, p.flag_dr_r3) class Group(BaseGroup): # variable that indicates whether the quota is reached (0 = quota is not reached; 1 = quota is reached) #quota = models.BooleanField(initial=0) # indicates whether the person is not eligbile to participate in the survey #screenout = models.BooleanField(initial=0) # gender filtering gender_group_male = models.IntegerField(initial=0) gender_group_female = models.IntegerField(initial=0) # age filtering age_1 = models.IntegerField(initial=0) age_2 = models.IntegerField(initial=0) age_3 = models.IntegerField(initial=0) age_4 = models.IntegerField(initial=0) age_5 = models.IntegerField(initial=0) # federalstate filtering fd_1 = models.IntegerField(initial=0) fd_2 = models.IntegerField(initial=0) fd_3 = models.IntegerField(initial=0) fd_4 = models.IntegerField(initial=0) fd_5 = models.IntegerField(initial=0) fd_6 = models.IntegerField(initial=0) fd_7 = models.IntegerField(initial=0) fd_8 = models.IntegerField(initial=0) fd_9 = models.IntegerField(initial=0) fd_10 = models.IntegerField(initial=0) fd_11 = models.IntegerField(initial=0) fd_12 = models.IntegerField(initial=0) fd_13 = models.IntegerField(initial=0) fd_14 = models.IntegerField(initial=0) fd_15 = models.IntegerField(initial=0) fd_16 = models.IntegerField(initial=0) class Player(BasePlayer): """specifiying varibales""" ##flags flag_dr_r1 = models.BooleanField(initial=False) flag_dr_r2 = models.BooleanField(initial=False) flag_dr_r3 = models.BooleanField(initial=False) flag_federalstate = models.BooleanField(initial=False) #Quota and Screenout quota = models.IntegerField(initial=0) # indicates whether the person is not eligbile to participate in the survey screenout = models.IntegerField(initial=0) ##random s # ballot group number ballot_group_number = models.IntegerField() # round_order round_one = models.IntegerField() round_two = models.IntegerField() round_three = models.IntegerField() # page_sequence page_sequence = models.StringField() # define names for ballot experiment randlastname_CDU_r1 = models.IntegerField() randfirstname_CDU_r1 = models.IntegerField() randlastname_SPD_r1 = models.IntegerField() randfirstname_SPD_r1 = models.IntegerField() randlastname_FDP_r1 = models.IntegerField() randfirstname_FDP_r1 = models.IntegerField() randlastname_AFD_r1 = models.IntegerField() randfirstname_AFD_r1 = models.IntegerField() randlastname_GRUENE_r1 = models.IntegerField() randfirstname_GRUENE_r1 = models.IntegerField() randlastname_LINKE_r1 = models.IntegerField() randfirstname_LINKE_r1 = models.IntegerField() randlastname_CDU_r2 = models.IntegerField() randfirstname_CDU_r2 = models.IntegerField() randlastname_SPD_r2 = models.IntegerField() randfirstname_SPD_r2 = models.IntegerField() randlastname_FDP_r2 = models.IntegerField() randfirstname_FDP_r2 = models.IntegerField() randlastname_AFD_r2 = models.IntegerField() randfirstname_AFD_r2 = models.IntegerField() randlastname_GRUENE_r2 = models.IntegerField() randfirstname_GRUENE_r2 = models.IntegerField() randlastname_LINKE_r2 = models.IntegerField() randfirstname_LINKE_r2 = models.IntegerField() randlastname_CDU_r3 = models.IntegerField() randfirstname_CDU_r3 = models.IntegerField() randlastname_SPD_r3 = models.IntegerField() randfirstname_SPD_r3 = models.IntegerField() randlastname_FDP_r3 = models.IntegerField() randfirstname_FDP_r3 = models.IntegerField() randlastname_AFD_r3 = models.IntegerField() randfirstname_AFD_r3 = models.IntegerField() randlastname_GRUENE_r3 = models.IntegerField() randfirstname_GRUENE_r3 = models.IntegerField() randlastname_LINKE_r3 = models.IntegerField() randfirstname_LINKE_r3 = models.IntegerField() # define title randdr_CDU_r1 = models.IntegerField() randdr_SPD_r1 = models.IntegerField() randdr_FDP_r1 = models.IntegerField() randdr_AFD_r1 = models.IntegerField() randdr_GRUENE_r1 = models.IntegerField() randdr_LINKE_r1 = models.IntegerField() randdr_CDU_r2 = models.IntegerField() randdr_SPD_r2 = models.IntegerField() randdr_FDP_r2 = models.IntegerField() randdr_AFD_r2 = models.IntegerField() randdr_GRUENE_r2 = models.IntegerField() randdr_LINKE_r2 = models.IntegerField() randdr_CDU_r3 = models.IntegerField() randdr_SPD_r3 = models.IntegerField() randdr_FDP_r3 = models.IntegerField() randdr_AFD_r3 = models.IntegerField() randdr_LINKE_r3 = models.IntegerField() randdr_GRUENE_r3 = models.IntegerField() # Define Partylists random_list_CDU_r1 = models.IntegerField() random_list_SPD_r1 = models.IntegerField() random_list_GRUENE_r1 = models.IntegerField() random_list_FDP_r1 = models.IntegerField() random_list_AFD_r1 = models.IntegerField() random_list_LINKE_r1 = models.IntegerField() random_list_CDU_r2 = models.IntegerField() random_list_SPD_r2 = models.IntegerField() random_list_GRUENE_r2 = models.IntegerField() random_list_FDP_r2 = models.IntegerField() random_list_AFD_r2 = models.IntegerField() random_list_LINKE_r2 = models.IntegerField() random_list_CDU_r3 = models.IntegerField() random_list_SPD_r3 = models.IntegerField() random_list_GRUENE_r3 = models.IntegerField() random_list_FDP_r3 = models.IntegerField() random_list_AFD_r3 = models.IntegerField() random_list_LINKE_r3 = models.IntegerField() # Preparation time_preparation = models.StringField(initial="-999") gender = models.IntegerField(initial="-999") age = models.IntegerField(label="", min=1890, max=2010) eligible_to_vote = models.IntegerField(blank=True, initial="-999") # age_wrong = models.IntegerField(blank=True, initial=0) participate_vote = models.IntegerField(blank=True, initial="-999") federalstate = models.StringField(blank=True, initial="-999") bavaria_dummy = models.IntegerField(blank=True, initial=0) flag = models.IntegerField(blank=True, initial=0) # Ballot preparation time_ballot_preparation_round1 = models.StringField(initial="-999") time_ballot_preparation_round2 = models.StringField(initial="-999") time_ballot_preparation_round3 = models.StringField(initial="-999") ##Ballot Round 1 # General candidate_r1_pos = models.StringField(blank=True) candidate_r1 = models.StringField(blank=True) party_r1_pos = models.StringField(blank=True) party_r1 = models.StringField(blank=True) # Candidate Names candname_CDU_r1 = models.StringField(blank=True) candname_SPD_r1 = models.StringField(blank=True) candname_GRUENE_r1 = models.StringField(blank=True) candname_FDP_r1 = models.StringField(blank=True) candname_AFD_r1 = models.StringField(blank=True) candname_LINKE_r1 = models.StringField(blank=True) # Incumbency incumbent_r1 = models.StringField(blank=True) incumbent_CDU_r1 = models.IntegerField(blank=True) incumbent_SPD_r1 = models.IntegerField(blank=True) incumbent_GRUENE_r1 = models.IntegerField(blank=True) incumbent_FDP_r1 = models.IntegerField(blank=True) incumbent_AFD_r1 = models.IntegerField(blank=True) incumbent_LINKE_r1 = models.IntegerField(blank=True) # Group 1 time_ballot_group1_round1_Erststimme = models.StringField(initial="-999") time_checked_ballot_group1_round1_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group1_round1_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group1_round1_ZweitStimme = models.StringField(initial="-999", blank=True) # Group 2 time_ballot_group2_round1_Erststimme = models.StringField(initial="-999") time_checked_ballot_group2_round1_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group2_round1_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group2_round1_ZweitStimme = models.StringField(initial="-999", blank=True) # Group 3 time_ballot_group3_round1_ErstZweitStimme = models.StringField(initial="-999") time_checked_ballot_group3_round1_ErstZweitStimme = models.StringField(initial="-999", blank=True) ##Ballot Round2 # General candidate_r2_pos = models.StringField(blank=True) candidate_r2 = models.StringField(blank=True) party_r2_pos = models.StringField(blank=True) party_r2 = models.StringField(blank=True) random_federalstate_r2 = models.IntegerField() # Candidate Names candname_CDU_r2 = models.StringField(blank=True) candname_SPD_r2 = models.StringField(blank=True) candname_GRUENE_r2 = models.StringField(blank=True) candname_FDP_r2 = models.StringField(blank=True) candname_AFD_r2 = models.StringField(blank=True) candname_LINKE_r2 = models.StringField(blank=True) # Incumbency incumbent_r2 = models.StringField(blank=True) incumbent_CDU_r2 = models.IntegerField(blank=True) incumbent_SPD_r2 = models.IntegerField(blank=True) incumbent_GRUENE_r2 = models.IntegerField(blank=True) incumbent_FDP_r2 = models.IntegerField(blank=True) incumbent_AFD_r2 = models.IntegerField(blank=True) incumbent_LINKE_r2 = models.IntegerField(blank=True) # Group1 time_ballot_group1_round2_Erststimme = models.StringField(initial="-999") time_checked_ballot_group1_round2_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group1_round2_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group1_round2_ZweitStimme = models.StringField(initial="-999", blank=True) # Group2 time_ballot_group2_round2_Erststimme = models.StringField(initial="-999") time_checked_ballot_group2_round2_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group2_round2_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group2_round2_ZweitStimme = models.StringField(initial="-999", blank=True) # Group3 time_ballot_group3_round2_ErstZweitStimme = models.StringField(initial="-999") time_checked_ballot_group3_round2_ErstZweitStimme = models.StringField(initial="-999", blank=True) ##Ballot Round3 # General candidate_r3_pos = models.StringField(blank=True) candidate_r3 = models.StringField(blank=True) party_r3_pos = models.StringField(blank=True) party_r3 = models.StringField(blank=True) # Candidate Names candname_CDU_r3 = models.StringField(blank=True) candname_SPD_r3 = models.StringField(blank=True) candname_GRUENE_r3 = models.StringField(blank=True) candname_FDP_r3 = models.StringField(blank=True) candname_AFD_r3 = models.StringField(blank=True) candname_LINKE_r3 = models.StringField(blank=True) # Incumbency incumbent_r3 = models.StringField(blank=True) incumbent_CDU_r3 = models.IntegerField(blank=True) incumbent_SPD_r3 = models.IntegerField(blank=True) incumbent_GRUENE_r3 = models.IntegerField(blank=True) incumbent_FDP_r3 = models.IntegerField(blank=True) incumbent_AFD_r3 = models.IntegerField(blank=True) incumbent_LINKE_r3 = models.IntegerField(blank=True) # Group1 time_ballot_group1_round3_Erststimme = models.StringField(initial="-999") time_checked_ballot_group1_round3_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group1_round3_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group1_round3_ZweitStimme = models.StringField(initial="-999", blank=True) # Group2 time_ballot_group2_round3_Erststimme = models.StringField(initial="-999") time_checked_ballot_group2_round3_Erststimme = models.StringField(initial="-999", blank=True) time_ballot_group2_round3_ZweitStimme = models.StringField(initial="-999") time_checked_ballot_group2_round3_ZweitStimme = models.StringField(initial="-999", blank=True) # Group3 time_ballot_group3_round3_ErstZweitStimme = models.StringField(initial="-999") time_checked_ballot_group3_round3_ErstZweitStimme = models.StringField(initial="-999", blank=True) ##Recall time_recall = models.StringField(initial="-999") recall_direct = models.StringField(blank=True, label="") recall_list = models.StringField(blank=True, label="") ##Party opinion time_party_opinion = models.StringField(initial="-999") skal_CDU = models.IntegerField(blank=True, initial="-999") skal_CSU = models.IntegerField(blank=True, initial="-999") skal_SPD = models.IntegerField(blank=True, initial="-999") skal_GRUENE = models.IntegerField(blank=True, initial="-999") skal_FDP = models.IntegerField(blank=True, initial="-999") skal_LINKE = models.IntegerField(blank=True, initial="-999") skal_AFD = models.IntegerField(blank=True, initial="-999") ##Politican opinion time_politican_opinion = models.StringField(initial="-999") skal_Laschet = models.IntegerField(blank=True, initial="-999") skal_Merz = models.IntegerField(blank=True, initial="-999") skal_Söder = models.IntegerField(blank=True, initial="-999") skal_Dobrindt = models.IntegerField(blank=True, initial="-999") skal_Scholz = models.IntegerField(blank=True, initial="-999") skal_Esken = models.IntegerField(blank=True, initial="-999") skal_Weidel = models.IntegerField(blank=True, initial="-999") skal_Chrupalla = models.IntegerField(blank=True, initial="-999") skal_Lindner = models.IntegerField(blank=True, initial="-999") skal_Kubicki = models.IntegerField(blank=True, initial="-999") skal_Wissler = models.IntegerField(blank=True, initial="-999") skal_Bartsch = models.IntegerField(blank=True, initial="-999") skal_Baerbock = models.IntegerField(blank=True, initial="-999") skal_Habeck = models.IntegerField(blank=True, initial="-999") ##Politcal Questions time_political_questions = models.StringField(initial="-999") politicalinterest = models.IntegerField(blank=True, initial="-999") former_election = models.IntegerField(blank=True, initial="-999") number_election = models.IntegerField(blank=True, label="") ##education time_education = models.StringField(initial="-999") general_education = models.IntegerField(blank=True, initial="-999") openfield_education = models.StringField(blank=True, label="") openfield_vocationaltraining = models.StringField(blank=True, label="") vocationaltraining = models.IntegerField(blank=True, initial="-999") ##socio_demographic_2 time_socio_demographic_2 = models.StringField(initial="-999") employment = models.IntegerField(blank=True, initial="-999") profession = models.StringField(blank=True, label="") main_language = models.IntegerField(blank=True, initial="-999") language_at_home = models.StringField(blank=True, label="") ##income time_income = models.StringField(initial="-999") nettoincome = models.IntegerField(blank=True, initial="-999") ##Time for welcome and end-page time_welcome = models.StringField(initial="-999") time_endpage = models.StringField(initial="-999")