From ec8e50e49912f47a6e14aca61ed9f094670d732b Mon Sep 17 00:00:00 2001 From: AnthoniaOkafor Date: Tue, 9 Jun 2020 05:05:38 +0100 Subject: [PATCH] added FileFied for video uploads, added field to classify users --- src/goal3/settings.py | 5 ++++ src/templates/incident_create.html | 14 ++++----- src/usersapp/forms.py | 2 +- .../migrations/0012_auto_20200609_0216.py | 29 +++++++++++++++++++ .../migrations/0013_auto_20200609_0349.py | 23 +++++++++++++++ .../migrations/0014_auto_20200609_0454.py | 23 +++++++++++++++ src/usersapp/models.py | 16 ++++++++-- src/usersapp/urls.py | 5 +++- src/usersapp/views.py | 8 +++-- 9 files changed, 112 insertions(+), 13 deletions(-) create mode 100644 src/usersapp/migrations/0012_auto_20200609_0216.py create mode 100644 src/usersapp/migrations/0013_auto_20200609_0349.py create mode 100644 src/usersapp/migrations/0014_auto_20200609_0454.py diff --git a/src/goal3/settings.py b/src/goal3/settings.py index 47a50ae..bc36623 100644 --- a/src/goal3/settings.py +++ b/src/goal3/settings.py @@ -83,6 +83,7 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'django.template.context_processors.media', ], }, }, @@ -141,3 +142,7 @@ # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_URL = '/static/' + +#Media files +MEDIA_ROOT= os.path.join(BASE_DIR, 'media/') +MEDIA_URL= "/media/" diff --git a/src/templates/incident_create.html b/src/templates/incident_create.html index d1ea549..13ae260 100644 --- a/src/templates/incident_create.html +++ b/src/templates/incident_create.html @@ -5,9 +5,15 @@
+
+ {% for message in messages %} +

{{message}}

+ {% endfor %} + +

Accident Form

It is our collective responsibility to report an accident. By reporting accidents, relevant agencies monitor problems and identify their root causes. Reporting road accidents enable actions to be taken to reduce future ocurrences, and at LifeShield it takes less than 5 minutes to report an accident.

-
{% csrf_token %} {% bootstrap_form form %} @@ -17,11 +23,5 @@

Accident Form

{% endbuttons %}
-
- {% for message in messages %} -

{{message}}

- {% endfor %} - -
\ No newline at end of file diff --git a/src/usersapp/forms.py b/src/usersapp/forms.py index 4ea7fed..4ed6984 100644 --- a/src/usersapp/forms.py +++ b/src/usersapp/forms.py @@ -5,7 +5,7 @@ class IncidentForm(ModelForm): class Meta: model = Incident - fields = ['accident_location', 'local_government_area', 'nearest_landmark', 'date_of_accident', 'time_of_accident', 'number_of_vehicles_involved', 'vehicle_type', 'if_other_vehicle_specify', 'vehicles_number_plates', 'vehicles_precrash_factors', 'road_geometry', 'road_type', 'driver_precrash_factors', 'collision_type', 'number_of_victims', 'number_of_injured', 'number_of_deaths', 'category_of_victims', 'victims_age_group', 'number_of_male_victims', 'number_of_female_victims', 'number_of_child_victims', 'victims_current_location', 'if_hospital_specify', 'if_other_location_specify', 'more_accident_info'] + fields = ['your_category', 'if_other_category_specify', 'accident_location', 'local_government_area', 'address_or_nearest_landmark', 'date_of_accident', 'time_of_accident', 'number_of_vehicles_involved', 'vehicle_type', 'if_other_vehicle_specify', 'vehicles_number_plates', 'vehicles_precrash_factors', 'road_geometry', 'road_type', 'driver_precrash_factors', 'collision_type', 'number_of_victims', 'number_of_injured', 'number_of_deaths', 'category_of_victims', 'victims_age_group', 'number_of_male_victims', 'number_of_female_victims', 'number_of_child_victims', 'victims_current_location', 'if_hospital_specify', 'if_other_location_specify', 'more_accident_info', 'videofile'] widgets = { 'date_of_accident': DatePickerInput(), # default date-format %m/%d/%Y will be used # 'end_date': DatePickerInput(format='%Y-%m-%d'), # specify date-frmat diff --git a/src/usersapp/migrations/0012_auto_20200609_0216.py b/src/usersapp/migrations/0012_auto_20200609_0216.py new file mode 100644 index 0000000..2ad95c1 --- /dev/null +++ b/src/usersapp/migrations/0012_auto_20200609_0216.py @@ -0,0 +1,29 @@ +# Generated by Django 3.0.6 on 2020-06-09 01:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('usersapp', '0011_auto_20200607_1614'), + ] + + operations = [ + migrations.AddField( + model_name='incident', + name='videofile', + field=models.FileField(blank=True, null=True, upload_to='videos/', verbose_name='upload a video or an image'), + ), + migrations.AddField( + model_name='incident', + name='your_category', + field=models.CharField(choices=[('Victim', 'Accident victim'), ('Eye nitness', 'Eye witness'), ('Driver', 'Driver of a vehicle in the accident')], db_column='User category', default=0, max_length=30), + preserve_default=False, + ), + migrations.AlterField( + model_name='incident', + name='collision_type', + field=models.CharField(choices=[('Mv/mv head on', 'Moving vehicles, head on'), ('Mv/mv rear end', 'Moving vehicles, rear end'), ('Mv/mv intersecting', 'Moving vehicles, intersecting'), ('Mv/mv overtake', 'Moving vehicles, overtake'), ('Mv/mv turn', 'Moving vehicles, turn'), ('Single mv hit object', 'Single moving vehicle, hit object'), ('Single mv run off', 'Single moving vehicle, run off'), ('Single mv falling off', 'Single moving vehicle, falling off'), ('Mv/pedestrian', 'Moving vehicle with pedestrian'), ('Mv/motorcyclist', 'Moving vehicle with motorcyclist'), ('Mv/bicyclist', 'Moving vehicle with bicyclist'), ('Other', 'Other')], max_length=70), + ), + ] diff --git a/src/usersapp/migrations/0013_auto_20200609_0349.py b/src/usersapp/migrations/0013_auto_20200609_0349.py new file mode 100644 index 0000000..ee5a670 --- /dev/null +++ b/src/usersapp/migrations/0013_auto_20200609_0349.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.6 on 2020-06-09 02:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('usersapp', '0012_auto_20200609_0216'), + ] + + operations = [ + migrations.RemoveField( + model_name='incident', + name='nearest_landmark', + ), + migrations.AddField( + model_name='incident', + name='address_or_nearest_landmark', + field=models.CharField(default=0, help_text='By landmark we mean somewhere notable such as bustop, market, hotel, hospital etc.', max_length=50, verbose_name='address and/or nearest landmark'), + preserve_default=False, + ), + ] diff --git a/src/usersapp/migrations/0014_auto_20200609_0454.py b/src/usersapp/migrations/0014_auto_20200609_0454.py new file mode 100644 index 0000000..6fb8022 --- /dev/null +++ b/src/usersapp/migrations/0014_auto_20200609_0454.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.6 on 2020-06-09 03:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('usersapp', '0013_auto_20200609_0349'), + ] + + operations = [ + migrations.AddField( + model_name='incident', + name='if_other_category_specify', + field=models.CharField(blank=True, db_column='User other category', max_length=50, null=True), + ), + migrations.AlterField( + model_name='incident', + name='your_category', + field=models.CharField(choices=[('Victim', 'Accident victim'), ('Eye nitness', 'Eye witness'), ('Driver', 'Driver of a vehicle in the accident'), ('Other', 'Other')], db_column='User category', max_length=30), + ), + ] diff --git a/src/usersapp/models.py b/src/usersapp/models.py index 3044518..a4f84b0 100644 --- a/src/usersapp/models.py +++ b/src/usersapp/models.py @@ -133,6 +133,14 @@ class Incident(models.Model) : ('Other', 'Other') ] + USER_CATEGORY = [ + ('Victim', 'Accident victim'), + ('Eye nitness', 'Eye witness'), + ('Driver', 'Driver of a vehicle in the accident'), + ('Other', 'Other') + ] + + COLLISION_CHOICES = [ ('Mv/mv head on', 'Moving vehicles, head on'), ('Mv/mv rear end', 'Moving vehicles, rear end'), @@ -147,10 +155,12 @@ class Incident(models.Model) : ('Mv/bicyclist', 'Moving vehicle with bicyclist'), ('Other', 'Other') ] - + + your_category=models.CharField(choices=USER_CATEGORY,max_length=30,null=False,blank=False, db_column='User category') + if_other_category_specify=models.CharField(max_length=50,null=True,blank=True, db_column='User other category') accident_location=models.CharField(choices=USER_LOCATION,max_length=45,null=False,blank=False) local_government_area=models.CharField(max_length=25,null=False,blank=False, db_column='LGA') - nearest_landmark=models.CharField(max_length=50,null=True,blank=True, help_text="By landmark we mean somewhere notable such as bustop, market, hotel, hospital etc.") + address_or_nearest_landmark=models.CharField(max_length=50,null=False,blank=False, help_text="By landmark we mean somewhere notable such as bustop, market, hotel, hospital etc.", verbose_name="address and/or nearest landmark") date_of_accident=models.DateField(auto_now=False) time_of_accident=models.TimeField(auto_now=False) number_of_vehicles_involved=models.PositiveIntegerField(null=False,blank=False, db_column='vehicles involved', help_text="Number of vehicles can be zero or more.") @@ -174,6 +184,8 @@ class Incident(models.Model) : if_hospital_specify=models.CharField(max_length=50,null=True,blank=True, db_column='hospital location') if_other_location_specify=models.CharField(max_length=50,null=True,blank=True, db_column='other location') more_accident_info=models.TextField(blank=True,null=True) + videofile= models.FileField(upload_to='videos/', null=True, blank=True, verbose_name="upload a video or an image") + #calling objects used in responder and search_responses function from views.py objects = models.Manager() diff --git a/src/usersapp/urls.py b/src/usersapp/urls.py index 07568f0..98d8386 100644 --- a/src/usersapp/urls.py +++ b/src/usersapp/urls.py @@ -19,10 +19,13 @@ #connecting incident_create to usersapp from .views import home, incident_create, responder, search_responses +# helps with video upload +from django.conf import settings +from django.conf.urls.static import static urlpatterns = [ path('', home, name='home'), path('incident/create/', incident_create, name='incident_create'), path('responder', responder, name='responder'), path('search/responses/', search_responses, name='search_responses'), -] +]+ static(settings.MEDIA_URL, document_root= settings.MEDIA_ROOT) diff --git a/src/usersapp/views.py b/src/usersapp/views.py index 98c5c14..5e6b06e 100644 --- a/src/usersapp/views.py +++ b/src/usersapp/views.py @@ -16,9 +16,13 @@ def home (request): def incident_create(request): if request.method == 'POST': + + # lastvideo= Incident.objects.last() + + #videofile= lastvideo.videofile #form = IncidentForm(request.POST) - userform = IncidentForm(request.POST) + userform = IncidentForm(request.POST, request.FILES) #if form.is_valid(): if userform.is_valid(): @@ -31,7 +35,6 @@ def incident_create(request): return redirect('incident_create') else: print('Unable to submit') - #messages.info(request, 'Unable to submit, some fields cannot be empty') #form = IncidentForm() userform = IncidentForm() @@ -39,6 +42,7 @@ def incident_create(request): return render(request, 'incident_create.html', { + #'videofile': videofile, #'form': form 'form': userform })