Skip to content

Commit 566af48

Browse files
Merge pull request #3 from anish58/master
3 Tasks completed
2 parents 5bf95f2 + 39a4970 commit 566af48

File tree

9 files changed

+162
-88
lines changed

9 files changed

+162
-88
lines changed

Lecture_10/zomato/db.sqlite3

0 Bytes
Binary file not shown.

Lecture_10/zomato/main/models.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
from django.db import models
2-
from django.db.models import Avg
3-
from django.core.validators import MaxValueValidator, MinValueValidator
2+
from django.core.validators import MaxValueValidator , MinValueValidator
43

5-
# Create your models here.
64

7-
class Restaurant(models.Model):
8-
name = models.CharField(max_length = 100)
9-
address = models.TextField(max_length = 512)
10-
open_time = models.TimeField()
11-
close_time = models.TimeField()
12-
13-
def get_rating(self):
14-
return self.review_set.aggregate(Avg('rating'))['rating__avg']
155

16-
def __str__(self):
17-
return self.name
6+
class Restaurant(models.Model):
7+
name = models.CharField(max_length = 100)
8+
address = models.TextField(max_length = 512)
9+
open_time = models.TimeField()
10+
close_time = models.TimeField()
11+
def get_data(self):
12+
return {
13+
'Name': self.name,
14+
'Address': self.address,
15+
'Open Time': self.open_time.strftime('%I:%M %p'),
16+
'Close Time': self.close_time.strftime('%I:%M %p'),
17+
'Average Rating': self.review_set.aggregate(models.Avg('rating'))['rating__avg'],
18+
}
19+
def __str__(self):
20+
return self.name
1821

1922
class Review(models.Model):
20-
restaurant = models.ForeignKey(Restaurant, on_delete = models.CASCADE)
21-
author = models.CharField(max_length = 100)
22-
title = models.CharField(max_length = 100)
23-
content = models.TextField(max_length=1024)
24-
rating = models.IntegerField(validators=[
25-
MaxValueValidator(5),
26-
MinValueValidator(0)
27-
])
28-
29-
def get_stars(self):
30-
return "* "*self.rating
23+
restaurant = models.ForeignKey(Restaurant, on_delete = models.CASCADE)
24+
author = models.CharField(max_length = 100)
25+
title = models.CharField(max_length = 100)
26+
content = models.TextField(max_length=1024)
27+
rating = models.IntegerField(validators=[
28+
MaxValueValidator(5),
29+
MinValueValidator(0)
30+
])
31+
def __str__(self):
32+
return self.title
3133

32-
def __str__(self):
33-
return self.title

Lecture_10/zomato/main/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
urlpatterns = [
55
path('', views.index, name = 'index'),
6-
path('restaurants/', views.restaurants, name = 'restaurants'),
7-
path('addRestaurants/', views.add_restraunt, name = 'addRestaurants'),
6+
path('restaurants/', views.Restaurants, name = 'restaurants'),
7+
path('addRestaurants/', views.add_rest, name = 'addRestaurants'),
88
path('restaurant/<int:id>', views.restaurant, name = 'restaurant'),
99
path('review/<int:id>', views.review, name = 'review')
1010
]

Lecture_10/zomato/main/views.py

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
1-
from django.http import HttpResponse, Http404
2-
from django.shortcuts import render, get_object_or_404
3-
from django.db.models import Avg
4-
1+
from django.shortcuts import render , get_object_or_404
2+
from django.http import HttpResponse
53
from . import models
4+
from django.db.models import Avg
65
from . import forms
76

8-
# Create your views here.
7+
98
def index(request):
10-
context = {}
11-
return render(request, 'main/index.html', context)
9+
context={}
10+
return render(request,r'main\index.html',context)
1211

13-
def restaurants(request):
14-
query_set = models.Restaurant.objects.all()
12+
def Restaurants(request):
13+
qs=models.Restaurant.objects.all()
14+
15+
f=request.GET['filter']
16+
r=request.GET['reverse']
1517

16-
query_set = query_set.annotate(average_rating = Avg('review__rating')).order_by('-average_rating')
18+
if f=='a2z' and r=='0':
19+
qs=qs.order_by('name')
20+
elif f=='a2z' and r=='1':
21+
qs=qs.order_by('-name')
22+
elif f=='rating' and r=='0':
23+
qs=qs.annotate(average_rating=Avg('review__rating')).order_by('average_rating')
24+
elif f=='rating' and r=='1':
25+
qs=qs.annotate(average_rating=Avg('review__rating')).order_by('-average_rating')
1726

18-
print(request.GET)
1927

20-
context = {
21-
"query_set": query_set,
28+
print(request.GET)
29+
context={
30+
'qs' :qs,
31+
'r':r,
32+
'f':f
2233
}
23-
return render(request, 'main/restaurants.html', context)
24-
25-
def add_restraunt(request):
34+
return render(request,r'main\restaurants.html',context )
35+
def add_rest(request):
2636
if request.method == "GET":
27-
form = forms.RestaurantForm()
28-
else: # POST request
37+
form = forms.RestaurantForm()
38+
else:
2939
form = forms.RestaurantForm(request.POST)
3040

3141
if form.is_valid():
@@ -35,12 +45,13 @@ def add_restraunt(request):
3545
context = {
3646
'form': form
3747
}
38-
return render(request, 'main/addRestaurant.html', context)
48+
return render(request, r'main/addRestaurant.html', context)
3949

4050
def restaurant(request, id):
51+
4152
rest = get_object_or_404(models.Restaurant, pk = id)
4253
success = False
43-
54+
4455
# Handling the form
4556
if request.method == "GET":
4657
form = forms.ReviewForm()
@@ -58,12 +69,15 @@ def restaurant(request, id):
5869
'form': form,
5970
'success': success
6071
}
61-
return render(request, 'main/restaurant.html', context)
72+
return render(request, r'main\restaurant.html', context)
6273

6374
def review(request, id):
6475
obj = get_object_or_404(models.Review, pk = id)
6576

6677
context = {
6778
'review': obj
6879
}
69-
return render(request, 'main/review.html', context)
80+
return render(request, r'main/review.html', context)
81+
82+
83+
Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,55 @@
11
<!DOCTYPE html>
22
<html>
3-
<head>
4-
<meta charset="utf-8" />
5-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6-
<title>Zomato Application</title>
7-
<meta name="viewport" content="width=device-width, initial-scale=1">
8-
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
9-
<script src="main.js"></script>
10-
{% block head %} {% endblock %}
11-
</head>
12-
<body>
13-
14-
{% block body %} {% endblock %}
15-
16-
</body>
3+
<head>
4+
<style>
5+
.dropbtn {
6+
background-color: #4CAF50;
7+
color: white;
8+
padding: 16px;
9+
font-size: 16px;
10+
border: none;
11+
}
12+
13+
14+
.dropdown {
15+
position: relative;
16+
display: inline-block;
17+
}
18+
19+
20+
.dropdown-content {
21+
display: none;
22+
position: absolute;
23+
background-color: #f1f1f1;
24+
min-width: 160px;
25+
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
26+
z-index: 1;
27+
}
28+
29+
30+
.dropdown-content a {
31+
color: black;
32+
padding: 12px 16px;
33+
text-decoration: none;
34+
display: block;
35+
}
36+
37+
38+
.dropdown-content a:hover {background-color: #ddd;}
39+
40+
41+
.dropdown:hover .dropdown-content {display: block;}
42+
43+
.dropdown:hover .dropbtn {background-color: #3e8e41;}
44+
</style>
45+
<meta charset="utf-8" />
46+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
47+
<title>Zomato Application</title>
48+
<meta name="viewport" content="width=device-width, initial-scale=1">
49+
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
50+
<script src="main.js"></script>
51+
</head>
52+
<body>
53+
{% block body %} {% endblock %}
54+
</body>
1755
</html>

Lecture_10/zomato/templates/main/index.html

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@
22

33
{% block body %}
44

5-
<h1> Welcome to our zomato app </h1>
6-
7-
<h3> Navigation </h3>
8-
9-
<ul>
10-
<li> <a href="{% url 'restaurants' %}"> Restaurants </a> </li>
11-
<li> <a href="{% url 'addRestaurants' %}"> Add Restaurant </a> </li>
12-
</ul>
5+
<h1 align=center> Welcome to our zomato app </h1>
6+
<h2>
7+
Navigation
8+
</h2>
9+
<ul>
10+
<li> <a href="{% url 'restaurants' %}?filter=a2z&reverse=0"> Restaurants </a> </li>
11+
<li>
12+
<a href="{% url 'addRestaurants' %}"
13+
onclick="window.open('addRestaurants',
14+
'newwindow',
15+
'width=300,height=250');
16+
return false;"
17+
>add Restaurant</a>
18+
</li>
19+
</ul>
1320

1421
{% endblock %}

Lecture_10/zomato/templates/main/restaurant.html

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22

33
{% block body %}
44

5-
Name: {{ restaurant.name }}<br>
6-
Address: {{ restaurant.address }}<br>
7-
Open Time: {{ restaurant.open_time }}<br>
8-
Close Time: {{ restaurant.close_time }}<br>
9-
10-
Average Rating: {{ restaurant.get_rating }}
5+
{% for f,v in restaurant.get_data.items %}
6+
{{ f }}: {{v}} <br>
7+
{% endfor %}
118

129
<h2> Reviews </h2>
1310

1411
<ul>
1512

1613
{% for review in restaurant.review_set.all %}
1714

18-
<li> <a target="_blank" href="{% url 'review' id=review.pk %}"> {{ review.title }} - {{ review.get_stars }} </a> </li>
15+
<li> <a onclick="window.open('{% url 'review' id=review.pk %}',
16+
'',
17+
'width=300,height=250');
18+
return false;"
19+
href="{% url 'review' id=review.pk %}"> {{ review.title }} - {{ review.get_stars }} </a> </li>
1920

2021
{% endfor %}
2122

Lecture_10/zomato/templates/main/restaurants.html

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,32 @@
22

33
{% block body %}
44

5-
<h1> Restaurants </h1>
5+
<h1 align=center> Restaurants </h1>
6+
7+
<div class="dropdown">
8+
<button class="dropbtn">Sort By</button>
9+
<div class="dropdown-content">
10+
<a href="{% url 'restaurants' %}?filter=a2z&reverse=0">a2z Asc</a>
11+
<a href="{% url 'restaurants' %}?filter=a2z&reverse=1">a2z Desc</a>
12+
<a href="{% url 'restaurants' %}?filter=rating&reverse=0">rating Asc</a>
13+
<a href="{% url 'restaurants' %}?filter=rating&reverse=1">rating Desc</a>
14+
</div>
15+
16+
<pre>
17+
618

7-
<ul>
819

9-
{% for restaurant in query_set %}
1020

11-
<li>
12-
<a href="{% url 'restaurant' id=restaurant.pk %}"> {{ restaurant.name }} </a> ( Average Rating: {{ restaurant.get_rating }} )
13-
</li>
1421

15-
{% endfor %}
1622

17-
</ul>
23+
24+
</pre>
25+
<h2 align='center'>List Of Restaurants</h2>
26+
<ul align='center'>
27+
{% for restaurant in qs %}
28+
<li> <a href="{% url 'restaurant' id=restaurant.pk %}"> {{ restaurant.name }} </a> </li>
1829

30+
31+
{% endfor %}
32+
</ul>
1933
{% endblock %}

Lecture_10/zomato/zomato/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
{
5757
'BACKEND': 'django.template.backends.django.DjangoTemplates',
5858
'DIRS': [
59-
os.path.join(BASE_DIR, 'templates/')
59+
os.path.join(BASE_DIR, 'templates')
6060
],
6161
'APP_DIRS': True,
6262
'OPTIONS': {

0 commit comments

Comments
 (0)