Как создать этажи и комнаты в системе управления хостелом с использованием Django

#django

#django

Вопрос:

Я пытаюсь создать систему управления хостелом с использованием Django. Система может позволить пользователю регистрировать арендаторов и назначать им комнаты на определенном этаже.
Я хочу создать хостел в django-admin с 5 этажами, и на каждом этаже по 50 комнат. Как я могу добавить этажи и комнаты в models.py ? Я не настолько хорошо разбираюсь в Django, ваши ответы действительно помогут мне многому научиться.

Ответ №1:

Вы могли бы начать с чего-то вроде

 class Hostel(models.Model):
    pass  # maybe add `name`, etc?


class Floor(models.Model):
    hostel = models.ForeignKey(Hostel, on_delete=models.PROTECT)
    floor_number = models.IntegerField()

    class Meta:
        unique_together = (("hostel", "floor_number"),)


class Room(models.Model):
    floor = models.ForeignKey(Floor, on_delete=models.PROTECT)
    room_number = models.IntegerField()
    # you might add `capacity`, etc. here

    class Meta:
        unique_together = (
            ("floor", "room_number"),
            ("floor__hostel", "room_number"),
        )
  

unique_together Предложения гарантируют, что

  • ни в одном хостеле нет двух этажей с одинаковым номером
  • ни на одном этаже нет двух комнат с одинаковым номером
  • ни в одном хостеле нет двух комнат с одинаковым номером (хотя, в зависимости от ваших бизнес-требований, это может и не потребоваться)

Тогда вам, вероятно, потребуется команда управления или другой скрипт для заполнения этих:

 hostel = Hostel.objects.create()
for floor_number in range(1, 6):  # Floors from 1 to 5
    floor = Floor.objects.create(
        hostel=hostel, floor_number=floor_number
    )
    for room_number_in_floor in range(1, 51):  # Rooms from 1 to 50 per floor
        # Translate floor 1, room 10 into 110, etc.:
        room_number = floor_number * 100   room_number
        room = Room.objects.create(
            floor=floor, room_number=room_number
        )
  

и вот, пожалуйста! Удачи. 🙂

Комментарии:

1. Большое спасибо. Это действительно полезно. 🙂