premises-rental/app/models.py

108 строки
2.7 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 = 'изображения комнат'
name = CharField(
verbose_name='Название',
max_length=32,
unique=True,
)
image = ImageField(
verbose_name='Изображение',
upload_to=upload_to('media/rooms/images'),
)
def __str__(self):
return self.name
class RoomPanorama(Model):
class Meta:
verbose_name = 'панорама комнаты'
verbose_name_plural = 'панорамы комнат'
name = CharField(
verbose_name='Название',
max_length=32,
unique=True,
)
image = ImageField(
verbose_name='Изображение',
upload_to=upload_to('media/rooms/panoramas'),
)
def __str__(self):
return self.name
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,
)