Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified Lecture_10/zomato/db.sqlite3
Binary file not shown.
55 changes: 29 additions & 26 deletions Lecture_10/zomato/main/models.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
from django.db import models
from django.db.models import Avg
from django.core.validators import MaxValueValidator, MinValueValidator
from django.core.validators import MaxValueValidator , MinValueValidator

# Create your models here.

class Restaurant(models.Model):
name = models.CharField(max_length = 100)
address = models.TextField(max_length = 512)
open_time = models.TimeField()
close_time = models.TimeField()

def get_rating(self):
return self.review_set.aggregate(Avg('rating'))['rating__avg']

def __str__(self):
return self.name
class Restaurant(models.Model):
name = models.CharField(max_length = 100)
address = models.TextField(max_length = 512)
open_time = models.TimeField()
close_time = models.TimeField()
def get_data(self):
return {
'Name': self.name,
'Address': self.address,
'Open Time': self.open_time.strftime('%I:%M %p'),
'Close Time': self.close_time.strftime('%I:%M %p'),
'Average Rating': self.review_set.aggregate(models.Avg('rating'))['rating__avg'],
}
def __str__(self):
return self.name

class Review(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete = models.CASCADE)
author = models.CharField(max_length = 100)
title = models.CharField(max_length = 100)
content = models.TextField(max_length=1024)
rating = models.IntegerField(validators=[
MaxValueValidator(5),
MinValueValidator(0)
])

def get_stars(self):
return "* "*self.rating
restaurant = models.ForeignKey(Restaurant, on_delete = models.CASCADE)
author = models.CharField(max_length = 100)
title = models.CharField(max_length = 100)
content = models.TextField(max_length=1024)
rating = models.IntegerField(validators=[
MaxValueValidator(5),
MinValueValidator(0)
])
def get_stars(self):
return "* "*self.rating

def __str__(self):
return self.title
def __str__(self):
return self.title
4 changes: 2 additions & 2 deletions Lecture_10/zomato/main/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

urlpatterns = [
path('', views.index, name = 'index'),
path('restaurants/', views.restaurants, name = 'restaurants'),
path('addRestaurants/', views.add_restraunt, name = 'addRestaurants'),
path('restaurants/', views.Restaurants, name = 'restaurants'),
path('addRestaurants/', views.add_rest, name = 'addRestaurants'),
path('restaurant/<int:id>', views.restaurant, name = 'restaurant'),
path('review/<int:id>', views.review, name = 'review')
]
59 changes: 37 additions & 22 deletions Lecture_10/zomato/main/views.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
from django.http import HttpResponse, Http404
from django.shortcuts import render, get_object_or_404
from django.db.models import Avg

from django.shortcuts import render , get_object_or_404
from django.http import HttpResponse
from . import models
from django.db.models import Avg
from . import forms
from django.views.generic import FormMixn


# Create your views here.
def index(request):
context = {}
return render(request, 'main/index.html', context)
context={}
return render(request,r'main\index.html',context)

def restaurants(request):
query_set = models.Restaurant.objects.all()
def Restaurants(request):
qs=models.Restaurant.objects.all()

f=request.GET['filter']
r=request.GET['reverse']

query_set = query_set.annotate(average_rating = Avg('review__rating')).order_by('-average_rating')
if f=='a2z' and r=='0':
qs=qs.order_by('name')
elif f=='a2z' and r=='1':
qs=qs.order_by('-name')
elif f=='rating' and r=='0':
qs=qs.annotate(average_rating=Avg('review__rating')).order_by('average_rating')
elif f=='rating' and r=='1':
qs=qs.annotate(average_rating=Avg('review__rating')).order_by('-average_rating')

print(request.GET)

context = {
"query_set": query_set,
print(request.GET)
context={
'qs' :qs,
'r':r,
'f':f
}
return render(request, 'main/restaurants.html', context)

def add_restraunt(request):
return render(request,r'main\restaurants.html',context )
def add_rest(request):
if request.method == "GET":
form = forms.RestaurantForm()
else: # POST request
form = forms.RestaurantForm()
else:
form = forms.RestaurantForm(request.POST)

if form.is_valid():
Expand All @@ -35,12 +46,13 @@ def add_restraunt(request):
context = {
'form': form
}
return render(request, 'main/addRestaurant.html', context)
return render(request, r'main/addRestaurant.html', context)

def restaurant(request, id):

rest = get_object_or_404(models.Restaurant, pk = id)
success = False

# Handling the form
if request.method == "GET":
form = forms.ReviewForm()
Expand All @@ -58,12 +70,15 @@ def restaurant(request, id):
'form': form,
'success': success
}
return render(request, 'main/restaurant.html', context)
return render(request, r'main\restaurant.html', context)

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

context = {
'review': obj
}
return render(request, 'main/review.html', context)
return render(request, r'main/review.html', context)



66 changes: 52 additions & 14 deletions Lecture_10/zomato/templates/main/base.html
Original file line number Diff line number Diff line change
@@ -1,17 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Zomato Application</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
{% block head %} {% endblock %}
</head>
<body>

{% block body %} {% endblock %}

</body>
<head>
<style>
.dropbtn {
background-color: #4CAF50;
color: white;
padding: 16px;
font-size: 16px;
border: none;
}


.dropdown {
position: relative;
display: inline-block;
}


.dropdown-content {
display: none;
position: absolute;
background-color: #f1f1f1;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}


.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}


.dropdown-content a:hover {background-color: #ddd;}


.dropdown:hover .dropdown-content {display: block;}

.dropdown:hover .dropbtn {background-color: #3e8e41;}
</style>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Zomato Application</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body>
{% block body %} {% endblock %}
</body>
</html>
23 changes: 15 additions & 8 deletions Lecture_10/zomato/templates/main/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@

{% block body %}

<h1> Welcome to our zomato app </h1>

<h3> Navigation </h3>

<ul>
<li> <a href="{% url 'restaurants' %}"> Restaurants </a> </li>
<li> <a href="{% url 'addRestaurants' %}"> Add Restaurant </a> </li>
</ul>
<h1 align=center> Welcome to our zomato app </h1>
<h2>
Navigation
</h2>
<ul>
<li> <a href="{% url 'restaurants' %}?filter=a2z&reverse=0"> Restaurants </a> </li>
<li>
<a href="{% url 'addRestaurants' %}"
onclick="window.open('addRestaurants',
'newwindow',
'width=300,height=250');
return false;"
>add Restaurant</a>
</li>
</ul>

{% endblock %}
15 changes: 8 additions & 7 deletions Lecture_10/zomato/templates/main/restaurant.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@

{% block body %}

Name: {{ restaurant.name }}<br>
Address: {{ restaurant.address }}<br>
Open Time: {{ restaurant.open_time }}<br>
Close Time: {{ restaurant.close_time }}<br>

Average Rating: {{ restaurant.get_rating }}
{% for f,v in restaurant.get_data.items %}
{{ f }}: {{v}} <br>
{% endfor %}

<h2> Reviews </h2>

<ul>

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

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

{% endfor %}

Expand Down
30 changes: 22 additions & 8 deletions Lecture_10/zomato/templates/main/restaurants.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,32 @@

{% block body %}

<h1> Restaurants </h1>
<h1 align=center> Restaurants </h1>

<div class="dropdown">
<button class="dropbtn">Sort By</button>
<div class="dropdown-content">
<a href="{% url 'restaurants' %}?filter=a2z&reverse=0">a2z Asc</a>
<a href="{% url 'restaurants' %}?filter=a2z&reverse=1">a2z Desc</a>
<a href="{% url 'restaurants' %}?filter=rating&reverse=0">rating Asc</a>
<a href="{% url 'restaurants' %}?filter=rating&reverse=1">rating Desc</a>
</div>

<pre>


<ul>

{% for restaurant in query_set %}

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

{% endfor %}

</ul>

</pre>
<h2 align='center'>List Of Restaurants</h2>
<ul align='center'>
{% for restaurant in qs %}
<li> <a href="{% url 'restaurant' id=restaurant.pk %}"> {{ restaurant.name }} </a> </li>


{% endfor %}
</ul>
{% endblock %}
2 changes: 1 addition & 1 deletion Lecture_10/zomato/zomato/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates/')
os.path.join(BASE_DIR, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
Expand Down
4 changes: 4 additions & 0 deletions Lecture_11/library_system/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"python.pythonPath": "${workspaceFolder}/env/bin/python",
"python.linting.pylintEnabled": false
}
Binary file added Lecture_11/library_system/db.sqlite3
Binary file not shown.
Empty file.
Loading