diff --git a/.directory b/.directory new file mode 100644 index 00000000..66ff4aa8 --- /dev/null +++ b/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2020,5,4,6,54,0 +Version=4 diff --git a/lmn/admin.py b/lmn/admin.py index 92946992..344178b1 100755 --- a/lmn/admin.py +++ b/lmn/admin.py @@ -2,10 +2,11 @@ # Register your models here, for them to be displayed in the admin view -from .models import Venue, Artist, Note, Show, Profile +from .models import Venue, Artist, Note, Show, Profile, Rating admin.site.register(Venue) admin.site.register(Artist) admin.site.register(Note) admin.site.register(Show) -admin.site.register(Profile) \ No newline at end of file +admin.site.register(Profile) +admin.site.register(Rating) \ No newline at end of file diff --git a/lmn/forms.py b/lmn/forms.py index 918f685f..7155d49a 100755 --- a/lmn/forms.py +++ b/lmn/forms.py @@ -1,5 +1,5 @@ from django import forms -from .models import Note, Profile +from .models import Note, Profile, Rating from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User @@ -21,6 +21,12 @@ class Meta: model = Note fields = ('title', 'text') +class NewRatingForm(forms.ModelForm): + stars = forms.IntegerField(max_value = 5, min_value = 1) + class Meta: + model = Rating + fields = ('stars',) + class UserRegistrationForm(UserCreationForm): diff --git a/lmn/migrations/0008_merge_20200510_2056.py b/lmn/migrations/0008_merge_20200510_2056.py new file mode 100644 index 00000000..e38c094e --- /dev/null +++ b/lmn/migrations/0008_merge_20200510_2056.py @@ -0,0 +1,14 @@ +# Generated by Django 2.1.11 on 2020-05-10 20:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('lmn', '0007_auto_20200429_1229'), + ('lmn', '0006_auto_20200505_2339'), + ] + + operations = [ + ] diff --git a/lmn/migrations/0009_auto_20200511_1105.py b/lmn/migrations/0009_auto_20200511_1105.py new file mode 100644 index 00000000..0dd359ff --- /dev/null +++ b/lmn/migrations/0009_auto_20200511_1105.py @@ -0,0 +1,34 @@ +# Generated by Django 2.1.11 on 2020-05-11 11:05 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('lmn', '0008_merge_20200510_2056'), + ] + + operations = [ + migrations.CreateModel( + name='Rating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('stars', models.IntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)])), + ('show', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lmn.Show')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AlterUniqueTogether( + name='rating', + unique_together={('user', 'show')}, + ), + migrations.AlterIndexTogether( + name='rating', + index_together={('user', 'show')}, + ), + ] diff --git a/lmn/models.py b/lmn/models.py index f3364a75..3cdd302a 100755 --- a/lmn/models.py +++ b/lmn/models.py @@ -1,5 +1,6 @@ from django.db import models from django.contrib.auth.models import User +from django.core.validators import MaxValueValidator, MinValueValidator from PIL import Image import datetime @@ -44,6 +45,9 @@ class Show(models.Model): def __str__(self): return 'Show with artist {} at {} on {}'.format(self.artist, self.venue, self.show_date) + def no_of_ratings(self): + ratings = Rating.objects.filter(show=self) + return len(ratings) ''' One user's opinion of one show. ''' class Note(models.Model): @@ -89,4 +93,19 @@ def save(self, *args, **kwargs): img.thumbnail(output_size) img.save(self.profile_img.path) +''' Ratings for shows ''' +class Rating(models.Model): + show = models.ForeignKey(Show, on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE) + stars = models.IntegerField(validators=[MinValueValidator(1), + MaxValueValidator(5)]) + ''' Allows only one show rating for one specific user ''' + class Meta: + unique_together = (('user', 'show'),) + index_together = (('user', 'show'),) + + def __str__(self): + return '{} Rating'.format(self.stars) + + diff --git a/lmn/templates/lmn/notes/new_note.html b/lmn/templates/lmn/notes/new_note.html index 72b562d0..767dc253 100755 --- a/lmn/templates/lmn/notes/new_note.html +++ b/lmn/templates/lmn/notes/new_note.html @@ -5,6 +5,7 @@
{{ note.title}}
{{ note.text }} - + {% endblock %} diff --git a/lmn/urls.py b/lmn/urls.py index 006a9b24..43751302 100755 --- a/lmn/urls.py +++ b/lmn/urls.py @@ -36,5 +36,5 @@ path('register/', views_users.register, name='register'), # Database/Admin related - path('c_?U7j399Hhq', views_admin.admin_main, name='api_data') + path('U7j399Hhq', views_admin.admin_main, name='api_data') ] diff --git a/lmn/views_admin.py b/lmn/views_admin.py index 3a28a263..0af54d1c 100644 --- a/lmn/views_admin.py +++ b/lmn/views_admin.py @@ -9,7 +9,8 @@ def get_shows(): # Parameters for API request - key = os.environ.get('TICK_MASTER') + # key = os.environ.get('TICK_MASTER') + key = 'wO4gBkxqFIMLDRfALyzCSWYglhOPzUhu' c_name = 'music' # Filter events to music num_shows = 20 # Number of upcoming shows countryCode = 'US' diff --git a/lmn/views_notes.py b/lmn/views_notes.py index 581df5a1..a35181a1 100755 --- a/lmn/views_notes.py +++ b/lmn/views_notes.py @@ -1,7 +1,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from .models import Venue, Artist, Note, Show -from .forms import VenueSearchForm, NewNoteForm, ArtistSearchForm, UserRegistrationForm +from .forms import VenueSearchForm, NewNoteForm, ArtistSearchForm, UserRegistrationForm, NewRatingForm from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User @@ -15,19 +15,23 @@ def new_note(request, show_pk): show = get_object_or_404(Show, pk=show_pk) if request.method == 'POST' : - form = NewNoteForm(request.POST) + ratingForm = NewRatingForm(request.POST) if form.is_valid(): note = form.save(commit=False) note.user = request.user note.show = show note.save() + rating = ratingForm.save(commit=False) + rating.show = show + rating.user = request.user + rating.save() return redirect('lmn:note_detail', note_pk=note.pk) else : form = NewNoteForm() - - return render(request, 'lmn/notes/new_note.html' , { 'form': form , 'show': show }) + ratingForm = NewRatingForm() + return render(request, 'lmn/notes/new_note.html' , { 'form': form , 'show': show , 'rating': ratingForm}) def latest_notes(request): diff --git a/lmnop_project/settings.py b/lmnop_project/settings.py index eb6e7af2..41df472c 100755 --- a/lmnop_project/settings.py +++ b/lmnop_project/settings.py @@ -82,14 +82,14 @@ # Uncomment this when you are ready to use Postgres. - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': 'lmnop', - 'USER' : 'user', - 'PASSWORD' : os.environ['LMNOP_DB_PW'], - 'HOST' : '/cloudsql/lmnop-275222:us-central1:lmnop-db', - 'PORT' : '5432', - }, + # 'default': { + # 'ENGINE': 'django.db.backends.postgresql', + # 'NAME': 'lmnop', + # 'USER' : 'user', + # 'PASSWORD' : os.environ['LMNOP_DB_PW'], + # 'HOST' : '/cloudsql/lmnop-275222:us-central1:lmnop-db', + # 'PORT' : '5432', + # }, } # When you use Postgres, comment out or remove this DB config.