from django.db import models from django.core.validators import RegexValidator, MaxValueValidator 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 class Meta: verbose_name = "IP адрес" verbose_name_plural = "IP адреса" class Apartament(models.Model): """Модель данных квартиры""" price = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость аренды квартиры за месяц") lastPrice = models.IntegerField(validators=[MaxValueValidator(450000)], default = 0, verbose_name="Прошлая стоимость аренды квартиры за месяц") bail = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость залога квартиры") agencyCommission = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Коммисия агенству") utilitiesPrice = models.CharField(max_length=100, verbose_name="Стоимость коммунальных услуг") minimumLeasePeriod = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Минимальный срок аренды в месяцах") address = models.CharField(max_length=100, verbose_name="Адрес квартиры") description = models.TextField(max_length=300, verbose_name="Описание квартиры") 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="Количество этажей в доме") phoneNumberRegex = RegexValidator(regex = r"^\+?1?\d{8,15}$") phoneNumber = models.CharField(validators=[phoneNumberRegex], max_length=16, unique=True, verbose_name="Номер телефона для связи") timeToBus = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей автобусной остановки в минутах") timeToTrain = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей Ж/Д станции в минутах") """Параметры квартиры""" isFurniture = models.BooleanField(verbose_name="Имеется мебель в квартире") isAnimal = models.BooleanField(verbose_name="Можно с питомцем") isTelevision = models.BooleanField(verbose_name="Имеется телевизор в квартире") isChild = models.BooleanField(verbose_name="Можно с детьми") 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="Недавно был ремонт в квартире") """Параметры дома""" isElevator = models.BooleanField(verbose_name="Имеется лифт в доме") isParking = models.BooleanField(verbose_name="Имеется закрытая парковка у дома") isGarbageChute = models.BooleanField(verbose_name="Имеется мусоропровод в доме") isConcierge = models.BooleanField(verbose_name="Имеется консьерж в доме") views = models.ManyToManyField(IPAddresses, related_name="post_views", blank=True) 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="Фотография") class Meta: verbose_name = "Фотография" verbose_name_plural = "Фотографии" # TODO: Add auth class User(models.Model): """Модель данных пользователя""" favorites_apartments = models.CharField(max_length=100, verbose_name="Избранные квартиры (CSV)") comparison_apartments = models.CharField(max_length=100, verbose_name="Квартиры для сравнения (CSV)") name = models.CharField(max_length=256, verbose_name='ФИО Пользователя') date_of_birth = models.DateField(verbose_name='Дата рождения пользователя') about_me = models.CharField(max_length=1000, verbose_name='Поле "О Себе"') gender = models.CharField(max_length=1, verbose_name='Пол пользователя (f,m,n,?)') phone = models.CharField(max_length=30, verbose_name='Телефон пользователя в международном формате (+00000000)', null=True) email = models.CharField(max_length=1000, verbose_name='Почтовый ящик пользователя в формате user@example.com', null=True) telegram = models.CharField(max_length=1000, verbose_name='Телеграм пользователя', null=True) discord = models.CharField(max_length=1000, verbose_name='Дискорд ник пользователя', null=True) # as in "City wok" city = models.CharField(max_length=1000, verbose_name='Город пользователя', null=True) role = models.CharField(max_length=1, verbose_name='Роль пользователя (s - student, a - admin, m - moderator)', null=False) photo_provider = models.CharField(max_length=100, verbose_name='Сервис, из которого загружается фотография пользователя (VVSU, GRAVATAR)') openid_addr = models.CharField(max_length=1000, null=False, verbose_name='Адрес Open ID (login@provider.com, для ВВГУ - login@vvsu.ru)') openid_id = models.CharField(max_length=10000, verbose_name='ID Пользователя в системе провайдера авторизации (скорее всего ВВГУ)') class Meta: verbose_name = "Пользователь" verbose_name_plural = "Пользователи" class PsychTestAnswers(models.Model): """Модель ответов на психологический тест""" user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь") first_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на первый вопрос") second_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на второй вопрос") third_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на третий вопрос") fourth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на четвертый вопрос") fifth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на пятый вопрос") sixth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на шестой вопрос") seventh_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на седьмой вопрос") eighth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на восьмой вопрос") nineth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на девятый вопрос") tenth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на десятый вопрос") eleventh_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на одиннадцатый вопрос") twelfth_question = models.IntegerField(validators=[MaxValueValidator(5)], verbose_name="Ответ на двенадцатый вопрос") class Meta: verbose_name = "Ответ на психологический тест" verbose_name_plural = "Ответы на психологический тест"