added user rating
This commit is contained in:
parent
249517a58b
commit
b23062965c
@ -2,10 +2,11 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
from apps.food.models import SingleFood, Menu, HappyHour
|
||||
from apps.food.models import SingleFood, Menu, HappyHour, UserRating
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(SingleFood)
|
||||
admin.site.register(Menu)
|
||||
admin.site.register(HappyHour)
|
||||
admin.site.register(UserRating)
|
||||
|
||||
|
||||
27
ofu_app/apps/food/migrations/0002_userrating.py
Normal file
27
ofu_app/apps/food/migrations/0002_userrating.py
Normal file
@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.2 on 2017-10-29 22:35
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('food', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserRating',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('rating', models.FloatField(default=0)),
|
||||
('food', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='food.SingleFood')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
20
ofu_app/apps/food/migrations/0003_auto_20171029_2341.py
Normal file
20
ofu_app/apps/food/migrations/0003_auto_20171029_2341.py
Normal file
@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.2 on 2017-10-29 22:41
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('food', '0002_userrating'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='userrating',
|
||||
name='id',
|
||||
field=models.AutoField(primary_key=True, serialize=False),
|
||||
),
|
||||
]
|
||||
27
ofu_app/apps/food/migrations/0004_auto_20171029_2343.py
Normal file
27
ofu_app/apps/food/migrations/0004_auto_20171029_2343.py
Normal file
@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.2 on 2017-10-29 22:43
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('food', '0003_auto_20171029_2341'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='userrating',
|
||||
name='food',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='food.SingleFood'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userrating',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
35
ofu_app/apps/food/migrations/0005_auto_20171030_0023.py
Normal file
35
ofu_app/apps/food/migrations/0005_auto_20171030_0023.py
Normal file
@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.2 on 2017-10-29 23:23
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('food', '0004_auto_20171029_2343'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='singlefood',
|
||||
name='fifth_star',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='singlefood',
|
||||
name='first_star',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='singlefood',
|
||||
name='fourth_star',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='singlefood',
|
||||
name='second_star',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='singlefood',
|
||||
name='third_star',
|
||||
),
|
||||
]
|
||||
@ -2,6 +2,7 @@
|
||||
from __future__ import unicode_literals
|
||||
from django.utils import timezone
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
MAX_LENGTH = 60
|
||||
|
||||
@ -28,11 +29,6 @@ class SingleFood(models.Model):
|
||||
price_guest = models.CharField(max_length=10, blank=True, null=True)
|
||||
image = models.ImageField(upload_to='food/%Y/%m/', blank=True)
|
||||
rating = models.FloatField(default=0)
|
||||
first_star = models.SmallIntegerField(default=0)
|
||||
second_star = models.SmallIntegerField(default=0)
|
||||
third_star = models.SmallIntegerField(default=0)
|
||||
fourth_star = models.SmallIntegerField(default=0)
|
||||
fifth_star = models.SmallIntegerField(default=0)
|
||||
allergens = models.ManyToManyField("Allergene", blank=True)
|
||||
|
||||
def __str__(self):
|
||||
@ -60,3 +56,13 @@ class HappyHour(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return "Date: %s, Location: %s" % (self.date.strftime("%Y.%m.%d"), self.location)
|
||||
|
||||
|
||||
class UserRating(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, unique=False)
|
||||
food = models.ForeignKey(SingleFood)
|
||||
rating = models.FloatField(default=0)
|
||||
|
||||
def __str__(self):
|
||||
return "User: %s - Rating: %s" % (self.user.username, self.rating)
|
||||
|
||||
@ -5,7 +5,7 @@ import datetime
|
||||
|
||||
from django.shortcuts import render
|
||||
|
||||
from apps.food.models import Menu, HappyHour, SingleFood
|
||||
from apps.food.models import Menu, HappyHour, SingleFood, UserRating
|
||||
from django.http import HttpResponse
|
||||
from rest_framework import viewsets, generics
|
||||
from rest_framework import status
|
||||
@ -80,29 +80,27 @@ def food(request):
|
||||
|
||||
|
||||
def food_rating(request):
|
||||
food_id = request.GET.get('food_id', None)
|
||||
rating = request.GET.get('rating', None)
|
||||
if food_id and rating:
|
||||
print("ID: %s, RATING: %s" % (food_id, rating))
|
||||
food = SingleFood.objects.get(id=food_id)
|
||||
if rating == str(1):
|
||||
food.first_star = food.first_star + 1
|
||||
if rating == str(2):
|
||||
food.second_star += 1
|
||||
if rating == str(3):
|
||||
food.third_star += 1
|
||||
if rating == str(4):
|
||||
food.fourth_star += 1
|
||||
if rating == str(5):
|
||||
food.fifth_star += 1
|
||||
global_count = food.first_star + food.second_star + food.third_star + food.fourth_star + food.fifth_star
|
||||
sum = food.first_star * 1 + food.second_star * 2 + food.third_star * 3 + food.fourth_star * 4 + food.fifth_star * 5
|
||||
food.rating = sum / global_count
|
||||
print("SUMME: " + str(sum / global_count))
|
||||
food.save()
|
||||
return HttpResponse(status=200)
|
||||
if (request.user.is_authenticated):
|
||||
food_id = request.GET.get('food_id', None)
|
||||
rating = request.GET.get('rating', None)
|
||||
if food_id and rating:
|
||||
food = SingleFood.objects.get(id=food_id)
|
||||
user_rating, created = UserRating.objects.get_or_create(user=request.user,
|
||||
food=food)
|
||||
user_rating.rating = rating
|
||||
user_rating.save()
|
||||
|
||||
return HttpResponse(status=404)
|
||||
food_user_ratings = UserRating.objects.all().filter(food=food)
|
||||
sum = 0
|
||||
for food_user_rating in food_user_ratings:
|
||||
sum += food_user_rating.rating
|
||||
|
||||
food.rating = sum / food_user_ratings.count()
|
||||
food.save()
|
||||
return HttpResponse(status=200)
|
||||
return HttpResponse(status=404)
|
||||
|
||||
return HttpResponse(status=403)
|
||||
|
||||
|
||||
def food_image(request):
|
||||
|
||||
@ -25,6 +25,7 @@ function add_Stars() {
|
||||
var rating = $(this).data('rating');
|
||||
console.log("ITEM: " + $(this) + " FOOD-ID: " + food + " FOOD-RATING: " + rating);
|
||||
for (var i = 0; i < 5; i++) {
|
||||
$(this).find('.rating-wrapper').addClass('food-' + food);
|
||||
$(this).find('.rating-wrapper').append('<i class="star-' + (i + 1) + '-' + food + ' fa fa-star-o star" aria-hidden="true"></i>');
|
||||
}
|
||||
buildRating(food, rating);
|
||||
@ -78,9 +79,22 @@ function sendRating(obj) {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function () {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
console.log("sent");
|
||||
}
|
||||
if (this.readyState == 4 && this.status == 403) {
|
||||
console.log("ERROR");
|
||||
ratingError('food-' + food_id);
|
||||
}
|
||||
};
|
||||
console.log(url + "?rating=" + rating + "&food_id=" + food_id);
|
||||
xhttp.open("GET", url + "?rating=" + rating + "&food_id=" + food_id, true);
|
||||
xhttp.send();
|
||||
}
|
||||
|
||||
function ratingError(obj) {
|
||||
console.log("Show in " + obj);
|
||||
$('.' + obj).append('<p class="rating-error">Please Log in to use the Rating function</p>');
|
||||
setTimeout(function () {
|
||||
$('.rating-error').remove();
|
||||
}, 1500);
|
||||
}
|
||||
Reference in New Issue
Block a user