From cc13ecf4a27dc81e4bc69b5ce44190cd8ff13a2b Mon Sep 17 00:00:00 2001 From: edward Date: Mon, 18 Jun 2018 15:47:44 +0100 Subject: [PATCH] Improve error display for required star ratings in reviews --- homerate/core/ratings.py | 7 +++---- homerate/profiles/static/js/profiles.js | 11 +---------- homerate/reviews/forms.py | 19 +++++++++++++++++++ .../reviews/templates/reviews/newreport.html | 15 ++++++++++----- homerate/reviews/views.py | 16 +++++++--------- 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/homerate/core/ratings.py b/homerate/core/ratings.py index 99feae1..cd6efa7 100644 --- a/homerate/core/ratings.py +++ b/homerate/core/ratings.py @@ -5,7 +5,6 @@ class RatingField(models.CharField): description = "" - def __init__(self, mandatory=False, weighting=False, *args, min_rating = 1, max_rating = 5, **kwargs): if weighting: @@ -22,6 +21,8 @@ def __init__(self, mandatory=False, weighting=False, *args, min_rating = 1, kwargs['blank'] = True kwargs['null'] = True else: + if not weighting: + self.choices = [("", 0)] + self.choices if not 'default' in kwargs: kwargs['default'] = (max_rating + min_rating) / 2 @@ -44,9 +45,7 @@ def formfield(self, form_class=None, choices_form_class=None, **kwargs): class_string = "weighting" else: class_string = "starRating" - - if self.mandatory: - class_string += "Mandatory" + kwargs['required'] = False return forms.ChoiceField(widget=forms.Select(attrs={'class': class_string}), **kwargs) diff --git a/homerate/profiles/static/js/profiles.js b/homerate/profiles/static/js/profiles.js index 89db344..eeec71e 100644 --- a/homerate/profiles/static/js/profiles.js +++ b/homerate/profiles/static/js/profiles.js @@ -1,22 +1,13 @@ (function ($) { /* Set the mandatory bar ratings. */ - $('.weightingMandatory').barrating({ - theme: 'bars-square', - showValues: true, - showSelectedRating: false - }); - - /* Set the optional bar ratings. */ $('.weighting').barrating({ theme: 'bars-square', - allowEmpty: true, - initialRating: 0, - deselectable: true, showValues: true, showSelectedRating: false }); + /* After a key is typed in the postcode box try and valdate */ $('.postcode').keyup(function (event) { validatePostcode() diff --git a/homerate/reviews/forms.py b/homerate/reviews/forms.py index 7348818..95c3918 100644 --- a/homerate/reviews/forms.py +++ b/homerate/reviews/forms.py @@ -40,6 +40,7 @@ class Meta: model = HouseReport exclude = ['house_filed', 'author'] + def __init__(self, *args, **kwargs): super(HouseReportForm, self).__init__(*args, **kwargs) self.fields['repair_quality'].required = False @@ -81,4 +82,22 @@ def __init__(self, *args, **kwargs): } ) + def is_valid(self): + self.fields['landlord_responsiveness'].required = True + self.fields['water_pressure'].required = True + self.fields['utilities'].required = True + self.fields['quietness'].required = True + self.fields['pest_free'].required = True + + valid = super(HouseReportForm, self).is_valid() + + self.fields['landlord_responsiveness'].required = False + self.fields['water_pressure'].required = False + self.fields['utilities'].required = False + self.fields['quietness'].required = False + self.fields['pest_free'].required = False + + return valid + + diff --git a/homerate/reviews/templates/reviews/newreport.html b/homerate/reviews/templates/reviews/newreport.html index c13569f..bd975db 100644 --- a/homerate/reviews/templates/reviews/newreport.html +++ b/homerate/reviews/templates/reviews/newreport.html @@ -30,6 +30,16 @@

Add New Review

Please do not add images or information that may affect the house's security.

+ {% for field in new_report_form %} + {% if field.errors %} + {% for reason in field.errors %} +
+

{{ field.label }} - {{ reason }}

+
+ {% endfor %} + {% endif %} + {% endfor %} +
@@ -301,11 +311,6 @@

Upload Images

showSelectedRating: true, deselectable: true }); - - $('.starRatingMandatory').barrating({ - theme: 'fontawesome-stars', - }); - $('[data-toggle="datepicker"]').datepicker({ format: 'yyyy-mm-dd' }); diff --git a/homerate/reviews/views.py b/homerate/reviews/views.py index 50f638e..52ac412 100644 --- a/homerate/reviews/views.py +++ b/homerate/reviews/views.py @@ -183,10 +183,10 @@ def new_report(request, id): print(review_form.errors) print(house_details_form.errors) print(image_formset.errors) - - house_details_form = HouseDetailsForm(instance=house) - review_form = HouseReportForm() - image_formset = image_formset_factory(queryset=ReviewImage.objects.none()) + else: + house_details_form = HouseDetailsForm(instance=house) + review_form = HouseReportForm() + image_formset = image_formset_factory(queryset=ReviewImage.objects.none()) return render(request, 'reviews/newreport.html', { 'house_details_form': house_details_form, @@ -229,19 +229,17 @@ def edit_report(request, id): report.save() return redirect('house', id=house.id) - else: - print("Form Error") - print(review_form.errors) + else: house_details_form = HouseDetailsForm(instance=house) review_form = HouseReportForm(instance=report) - return render(request, 'reviews/newreport.html', { + return render(request, 'reviews/newreport.html', { 'house_details_form': house_details_form, 'new_report_form': review_form, 'house': house, 'edit_page': True, - 'is_suspicious': Profile.objects.get(user=request.user).is_suspicious + 'is_suspicious': Profile.objects.get(user=request.user).is_suspicious, }) @login_required