![]() |
|
Django: View is unable to find attributes of database model - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html) +--- Thread: Django: View is unable to find attributes of database model (/thread-41254.html) |
Django: View is unable to find attributes of database model - pythonpaul32 - Dec-07-2023 I am trying to make a reservation system for a hotel using Django. I am getting this error when I try to finalize the reservation, I am unable to do so. I believe it is related to the ways that I am trying to get the rooms from the database Here is my make_reservation view def make_reservation(request, room_type, check_in_date, check_out_date, guests):
if request.method == 'POST':
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
email = request.POST.get('email')
phone_number = request.POST.get('phone_number')
customer = Customer.objects.create(
first_name=first_name,
last_name=last_name,
email=email,
phone_number=phone_number
)
room_type = request.resolver_match.kwargs['room_type']
rooms = Room.objects.filter(type=room_type)
if rooms.exists():
room = rooms.first()
reservation = Reservation.objects.create(
room=room,
customer=customer,
check_in_date=check_in_date,
check_out_date=check_out_date
)
room.mark_as_booked()
return redirect('reservation_success')
else:
print(f"No room of type {room_type} exists.")
context = {
'room_type': room_type,
'check_in_date': check_in_date,
'check_out_date': check_out_date,
'guests': guests,
}
return render(request, 'make_reservation.html', context)I believe the issue is here room_type = request.resolver_match.kwargs['room_type']
rooms = Room.objects.filter(type=room_type)
if rooms.exists():
room = rooms.first()
Here are my modelsclass Room(models.Model):
TYPES = [
('double', 'Double'),
('king', 'King'),
('two_double', 'Two Double'),
('suite', 'Suite')
]
room_no = models.IntegerField(unique=True)
type = models.CharField(max_length=20, choices=TYPES)
price = models.IntegerField()
available = models.BooleanField(default=True)
def __str__(self):
return f"Room: {self.room_no} - ${self.price}"
def mark_as_booked(self):
self.available = False
self.save()
def mark_as_available(self):
self.available = True
self.save()
class Reservation(models.Model):
room = models.ForeignKey(Room, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
check_in_date = models.DateField()
check_out_date = models.DateField()
def __str__(self):
return f"Reservation for {self.customer} - Room {self.room.room_no}Basically it's not showing there are rooms in the db. Any ideas why?
RE: Django: View is unable to find attributes of database model - tahirahmedd - May-20-2024 Ensure the room_type value is correctly passed and matches the choices defined in your Room model. For instance, if you pass "king" but it is stored as "King" in the database, there will be a mismatch. Improve error handling to get more information about the failure update this code: from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Room, Reservation, Customer
from django.core.exceptions import ObjectDoesNotExist
def make_reservation(request, room_type, check_in_date, check_out_date, guests):
if request.method == 'POST':
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
email = request.POST.get('email')
phone_number = request.POST.get('phone_number')
try:
customer = Customer.objects.create(
first_name=first_name,
last_name=last_name,
email=email,
phone_number=phone_number
)
except Exception as e:
return HttpResponse(f"Error creating customer: {e}")
try:
# Filter rooms by type and availability
rooms = Room.objects.filter(type=room_type, available=True)
if rooms.exists():
room = rooms.first()
# Create a reservation
reservation = Reservation.objects.create(
room=room,
customer=customer,
check_in_date=check_in_date,
check_out_date=check_out_date
)
# Mark room as booked
room.mark_as_booked()
return redirect('reservation_success')
else:
return HttpResponse(f"No available room of type {room_type} exists.")
except ObjectDoesNotExist:
return HttpResponse(f"Room type {room_type} does not exist.")
except Exception as e:
return HttpResponse(f"Error during reservation: {e}")
context = {
'room_type': room_type,
'check_in_date': check_in_date,
'check_out_date': check_out_date,
'guests': guests,
}
return render(request, 'make_reservation.html', context)
|