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,
)