premises-rental/app/models.py

92 строки
2.4 KiB
Python

import os
from django.db.models import Model
from django.db.models import OneToOneField, ManyToManyField, CASCADE
from django.db.models import CharField, TextField, IntegerField, DecimalField, BooleanField, ImageField
def upload_to(path, /):
def wrapper(instance, filename):
return os.path.join(
path,
'%s.%s' % (
instance.pk,
filename.split('.')[-1],
),
)
return wrapper
class RoomImage(Model):
class Meta:
verbose_name = 'изображение комнаты'
verbose_name_plural = 'изображения комнат'
image = ImageField(
verbose_name='Изображение',
upload_to=upload_to('media/rooms/images'),
)
class RoomPanorama(Model):
class Meta:
verbose_name = 'панорама комнаты'
verbose_name_plural = 'панорамы комнат'
image = ImageField(
verbose_name='Изображение',
upload_to=upload_to('media/rooms/panoramas'),
)
class Room(Model):
class Meta:
verbose_name = 'комната'
verbose_name_plural = 'комнаты'
name = CharField(
verbose_name='Название',
max_length=32,
unique=True,
)
description = TextField(
verbose_name='Описание',
max_length=4096,
)
preview_image = OneToOneField(
verbose_name='Изображение в каталоге',
to=RoomImage,
on_delete=CASCADE,
related_name='room_preview',
)
room_images = ManyToManyField(
verbose_name='Изображения',
to=RoomImage,
related_name='room_images',
)
panorama_images = ManyToManyField(
verbose_name='Панорамы',
to=RoomPanorama,
)
area = DecimalField(
verbose_name='Площадь',
max_digits=4,
decimal_places=1,
)
price = DecimalField(
verbose_name='Стоимость',
max_digits=10,
decimal_places=2,
)
ordinal = IntegerField(
verbose_name='Порядковый номер',
)
is_visible = BooleanField(
verbose_name='Отображать в каталоге',
default=True,
)
is_available = BooleanField(
verbose_name='Доступно для аренды',
default=True,
)