2023-04-10 09:34:57 +02:00
|
|
|
|
from django.db import models
|
2023-04-17 14:48:32 +02:00
|
|
|
|
from django.core.validators import RegexValidator, MaxValueValidator
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
class IPAddresses(models.Model):
|
|
|
|
|
"""Модель данных для хранения IP адрессов (нужно для подсчета количества просмотров)"""
|
|
|
|
|
ipAddressRegex = RegexValidator(regex = r"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$")
|
|
|
|
|
ipAddress = models.CharField(validators=[ipAddressRegex], max_length=15, verbose_name="IP адрес")
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.ipAddress
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "IP адрес"
|
|
|
|
|
verbose_name_plural = "IP адреса"
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
class Apartament(models.Model):
|
|
|
|
|
"""Модель данных квартиры"""
|
|
|
|
|
price = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость аренды квартиры за месяц")
|
2023-05-04 12:25:19 +02:00
|
|
|
|
lastPrice = models.IntegerField(validators=[MaxValueValidator(450000)], default = 0, verbose_name="Прошлая стоимость аренды квартиры за месяц")
|
2023-04-17 14:48:32 +02:00
|
|
|
|
bail = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость залога квартиры")
|
2023-05-05 13:03:18 +02:00
|
|
|
|
agencyCommission = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Коммисия агенству")
|
2023-04-17 14:48:32 +02:00
|
|
|
|
utilitiesPrice = models.CharField(max_length=100, verbose_name="Стоимость коммунальных услуг")
|
|
|
|
|
minimumLeasePeriod = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Минимальный срок аренды в месяцах")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
address = models.CharField(max_length=100, verbose_name="Адрес квартиры")
|
|
|
|
|
description = models.TextField(max_length=300, verbose_name="Описание квартиры")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
perimetrs = models.FloatField(validators=[MaxValueValidator(250)], verbose_name="Количество квадратных метров")
|
|
|
|
|
rooms = models.IntegerField(validators=[MaxValueValidator(10)], verbose_name="Количество комнат")
|
|
|
|
|
ceilingHeight = models.FloatField(validators=[MaxValueValidator(5)], verbose_name="Высота потолков в метрах")
|
|
|
|
|
floor = models.IntegerField(validators=[MaxValueValidator(50)], verbose_name="Этаж квартиры")
|
|
|
|
|
floorHouse = models.IntegerField(validators=[MaxValueValidator(50)], verbose_name="Количество этажей в доме")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
|
|
|
|
phoneNumberRegex = RegexValidator(regex = r"^\+?1?\d{8,15}$")
|
2023-04-17 14:48:32 +02:00
|
|
|
|
phoneNumber = models.CharField(validators=[phoneNumberRegex], max_length=16, unique=True, verbose_name="Номер телефона для связи")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
timeToBus = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей автобусной остановки в минутах")
|
|
|
|
|
timeToTrain = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей Ж/Д станции в минутах")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
|
|
|
|
"""Параметры квартиры"""
|
2023-04-17 14:48:32 +02:00
|
|
|
|
isFurniture = models.BooleanField(verbose_name="Имеется мебель в квартире")
|
|
|
|
|
isAnimal = models.BooleanField(verbose_name="Можно с питомцем")
|
|
|
|
|
isTelevision = models.BooleanField(verbose_name="Имеется телевизор в квартире")
|
2023-05-05 13:03:18 +02:00
|
|
|
|
isChild = models.BooleanField(verbose_name="Можно с детьми")
|
2023-04-17 14:48:32 +02:00
|
|
|
|
isInternet = models.BooleanField(verbose_name="Проведен интернет в квартире")
|
|
|
|
|
isBathroom = models.BooleanField(verbose_name="Имеется санузел в квартире")
|
|
|
|
|
isRefrigerator = models.BooleanField(verbose_name="Имеется холодильник в квартире")
|
|
|
|
|
isWasher = models.BooleanField(verbose_name="Имеется стиральная машинка в квартире")
|
|
|
|
|
isAirConditioning = models.BooleanField(verbose_name="Имеется кондиционер в квартире")
|
|
|
|
|
isFreshRepair = models.BooleanField(verbose_name="Недавно был ремонт в квартире")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
|
|
|
|
"""Параметры дома"""
|
2023-04-17 14:48:32 +02:00
|
|
|
|
isElevator = models.BooleanField(verbose_name="Имеется лифт в доме")
|
|
|
|
|
isParking = models.BooleanField(verbose_name="Имеется закрытая парковка у дома")
|
|
|
|
|
isGarbageChute = models.BooleanField(verbose_name="Имеется мусоропровод в доме")
|
|
|
|
|
isConcierge = models.BooleanField(verbose_name="Имеется консьерж в доме")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
views = models.ManyToManyField(IPAddresses, related_name="post_views", blank=True)
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
dateCreate = models.DateField(auto_now_add=True, editable=False, verbose_name="Дата добавления квартиры")
|
|
|
|
|
|
|
|
|
|
def total_views(self):
|
|
|
|
|
return self.views.count()
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Квартира"
|
|
|
|
|
verbose_name_plural = "Квартиры"
|
|
|
|
|
ordering = ['-dateCreate']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Photo(models.Model):
|
|
|
|
|
"""Модель данных фотографий квартир"""
|
|
|
|
|
apartament = models.ForeignKey(Apartament, on_delete = models.CASCADE, verbose_name="Квартира")
|
|
|
|
|
image = models.ImageField(upload_to='photos/%Y/%m/%d', verbose_name="Фотография")
|
2023-04-10 09:34:57 +02:00
|
|
|
|
|
2023-04-17 14:48:32 +02:00
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Фотография"
|
2023-05-09 10:32:18 +02:00
|
|
|
|
verbose_name_plural = "Фотографии"
|
|
|
|
|
|
2023-05-09 11:05:47 +02:00
|
|
|
|
# TODO: Add auth
|
2023-05-09 10:32:18 +02:00
|
|
|
|
class User(models.Model):
|
|
|
|
|
"""Тестовая модель данных для избранных и сравнения"""
|
|
|
|
|
favorites_apartaments = models.CharField(max_length=100, verbose_name="Избранные квартиры")
|
|
|
|
|
apartaments_for_comparison = models.CharField(max_length=100, verbose_name="Квартиры для сравнения")
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Пользователь"
|
|
|
|
|
verbose_name_plural = "Пользователи"
|