Модель связана с двумя другими моделями. Как мне получить доступ к свойствам этих двух других моделей в django
Я нахожусь в процессе создания системы управления бронированием номеров с использованием Django. Я столкнулся с проблемой доступа к моделям.
Вот моя модель комнаты
class Room(models.Model):
name = models.CharField(max_length=30)
date = models.DateField()
defined_check_in_time = models.IntegerField()
defined_check_out_time = models.IntegerField()
booked = models.BooleanField(default = False)
USERNAME_FIELD = 'name'
class Meta:
ordering = ['date', 'defined_check_in_time']
def __str__(self):
return self.name
def is_booked(self):
return self.booked
def set_booked(self):
self.booked = True
Вот моя модель бронирования
class Booking(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
room = models.ForeignKey(Room, on_delete=models.CASCADE)
def __str__(self):
return f'{self.user} has booked {self.room} from {self.room.defined_check_in_time} to {self.room.defined_check_out_time} on {self.room.date}'
Я связал модель User и модель Room в модели Booking, используя внешний ключ, когда пользователь бронирует комнату. Модель User определена в другом файле. Я не включил код этой модели сюда.
Когда пользователь бронирует номер, соответствующий объект номера и объект пользователя связывается с объектом бронирования. Чтобы отобразить бронирования пользователя, мне нужно сделать запрос к модели Booking, используя объект User.
Вот, мой вопрос в том, как я могу получить доступ к атрибутам пользователя и объекта комнаты внутри объекта бронирования?
Чтобы получить доступ к информации внутри объекта бронирования, сначала нужно выбрать объект бронирования, какой бы способ идентификации бронирования вы ни выбрали... возможно, по id. Допустим, booking id=100
booking = Booking.objects.get(id=100)
Теперь для поиска информации по внешнему ключу можно просто . lookup.
booking_user = booking.user.username
booking_room = booking.room.name
или найти любые заказы на забронированные номера:
booked_rooms = Booking.objects.filter(room.booked == True)