legacy/pairent_backend/pairent_app/models.py

132 lines
9.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 = "Ответы на психологический тест"