add model photo and ipaddresses and change model apartament

This commit is contained in:
Александр Манаенков 2023-04-17 22:48:32 +10:00
parent bd35be6cd3
commit 9638619fe2
6 changed files with 327 additions and 41 deletions

View File

@ -1,3 +1,5 @@
from django.contrib import admin
from .models import Apartament, Photo
# Register your models here.
admin.site.register(Apartament)
admin.site.register(Photo)

View File

@ -0,0 +1,51 @@
# Generated by Django 4.1.7 on 2023-04-12 10:33
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Apartament',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.IntegerField(help_text='Стоимость аренды квартиры за месяц', validators=[django.core.validators.MaxValueValidator(450000)])),
('bail', models.IntegerField(help_text='Стоимость залога квартиры', validators=[django.core.validators.MaxValueValidator(450000)])),
('agencyСommission', models.IntegerField(validators=[django.core.validators.MaxValueValidator(450000)], verbose_name='Коммисия агенству')),
('utilitiesPrice', models.CharField(help_text='Стоимость коммунальных услуг', max_length=100)),
('minimumLeasePeriod', models.IntegerField(help_text='Минимальный срок аренды в месяцах', validators=[django.core.validators.MaxValueValidator(60)])),
('address', models.CharField(help_text='Адрес квартиры', max_length=100)),
('description', models.TextField(help_text='Описание квартиры', max_length=300)),
('perimetrs', models.FloatField(help_text='Количество квадратных метров', validators=[django.core.validators.MaxValueValidator(250)])),
('rooms', models.IntegerField(help_text='Количество комнат', validators=[django.core.validators.MaxValueValidator(10)])),
('ceilingHeight', models.FloatField(help_text='Высота потолков в метрах', validators=[django.core.validators.MaxValueValidator(5)])),
('floor', models.IntegerField(help_text='Этаж квартиры', validators=[django.core.validators.MaxValueValidator(50)])),
('floorHouse', models.IntegerField(help_text='Количество этажей в доме', validators=[django.core.validators.MaxValueValidator(50)])),
('phoneNumber', models.CharField(help_text='Номер телефона для связи', max_length=16, unique=True, validators=[django.core.validators.RegexValidator(regex='^\\+?1?\\d{8,15}$')])),
('timeToBus', models.IntegerField(help_text='Время до ближайшей автобусной остановки в минутах', validators=[django.core.validators.MaxValueValidator(60)])),
('timeToTrain', models.IntegerField(help_text='Время до ближайшей Ж/Д станции в минутах', validators=[django.core.validators.MaxValueValidator(60)])),
('isFurniture', models.BooleanField(help_text='Имеется мебель в квартире')),
('isAnimal', models.BooleanField(help_text='Можно с питомцем')),
('isTelevision', models.BooleanField(help_text='Имеется телевизор в квартире')),
('isСhild', models.BooleanField(help_text='Можно с детьми')),
('isInternet', models.BooleanField(help_text='Проведен интернет в квартире')),
('isBathroom', models.BooleanField(help_text='Имеется санузел в квартире')),
('isRefrigerator', models.BooleanField(help_text='Имеется холодильник в квартире')),
('isWasher', models.BooleanField(help_text='Имеется стиральная машинка в квартире')),
('isAirConditioning', models.BooleanField(help_text='Имеется кондиционер в квартире')),
('isFreshRepair', models.BooleanField(help_text='Недавно был ремонт в квартире')),
('isElevator', models.BooleanField(help_text='Имеется лифт в доме')),
('isParking', models.BooleanField(help_text='Имеется закрытая парковка у дома')),
('isGarbageChute', models.BooleanField(help_text='Имеется мусоропровод в доме')),
('isConcierge', models.BooleanField(help_text='Имеется консьерж в доме')),
('dateCreate', models.DateField(auto_now_add=True, help_text='Дата добавления квартиры')),
],
),
]

View File

@ -0,0 +1,192 @@
# Generated by Django 4.1.7 on 2023-04-17 12:43
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('pairent_app', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='IPAddresses',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ipAddress', models.CharField(max_length=15, validators=[django.core.validators.RegexValidator(regex='^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$')], verbose_name='IP адрес')),
],
options={
'verbose_name': 'IP адрес',
'verbose_name_plural': 'IP адреса',
},
),
migrations.AlterModelOptions(
name='apartament',
options={'ordering': ['-dateCreate'], 'verbose_name': 'Квартира', 'verbose_name_plural': 'Квартиры'},
),
migrations.AlterField(
model_name='apartament',
name='address',
field=models.CharField(max_length=100, verbose_name='Адрес квартиры'),
),
migrations.AlterField(
model_name='apartament',
name='bail',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(450000)], verbose_name='Стоимость залога квартиры'),
),
migrations.AlterField(
model_name='apartament',
name='ceilingHeight',
field=models.FloatField(validators=[django.core.validators.MaxValueValidator(5)], verbose_name='Высота потолков в метрах'),
),
migrations.AlterField(
model_name='apartament',
name='dateCreate',
field=models.DateField(auto_now_add=True, verbose_name='Дата добавления квартиры'),
),
migrations.AlterField(
model_name='apartament',
name='description',
field=models.TextField(max_length=300, verbose_name='Описание квартиры'),
),
migrations.AlterField(
model_name='apartament',
name='floor',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(50)], verbose_name='Этаж квартиры'),
),
migrations.AlterField(
model_name='apartament',
name='floorHouse',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(50)], verbose_name='Количество этажей в доме'),
),
migrations.AlterField(
model_name='apartament',
name='isAirConditioning',
field=models.BooleanField(verbose_name='Имеется кондиционер в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isAnimal',
field=models.BooleanField(verbose_name='Можно с питомцем'),
),
migrations.AlterField(
model_name='apartament',
name='isBathroom',
field=models.BooleanField(verbose_name='Имеется санузел в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isConcierge',
field=models.BooleanField(verbose_name='Имеется консьерж в доме'),
),
migrations.AlterField(
model_name='apartament',
name='isElevator',
field=models.BooleanField(verbose_name='Имеется лифт в доме'),
),
migrations.AlterField(
model_name='apartament',
name='isFreshRepair',
field=models.BooleanField(verbose_name='Недавно был ремонт в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isFurniture',
field=models.BooleanField(verbose_name='Имеется мебель в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isGarbageChute',
field=models.BooleanField(verbose_name='Имеется мусоропровод в доме'),
),
migrations.AlterField(
model_name='apartament',
name='isInternet',
field=models.BooleanField(verbose_name='Проведен интернет в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isParking',
field=models.BooleanField(verbose_name='Имеется закрытая парковка у дома'),
),
migrations.AlterField(
model_name='apartament',
name='isRefrigerator',
field=models.BooleanField(verbose_name='Имеется холодильник в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isTelevision',
field=models.BooleanField(verbose_name='Имеется телевизор в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isWasher',
field=models.BooleanField(verbose_name='Имеется стиральная машинка в квартире'),
),
migrations.AlterField(
model_name='apartament',
name='isСhild',
field=models.BooleanField(verbose_name='Можно с детьми'),
),
migrations.AlterField(
model_name='apartament',
name='minimumLeasePeriod',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(60)], verbose_name='Минимальный срок аренды в месяцах'),
),
migrations.AlterField(
model_name='apartament',
name='perimetrs',
field=models.FloatField(validators=[django.core.validators.MaxValueValidator(250)], verbose_name='Количество квадратных метров'),
),
migrations.AlterField(
model_name='apartament',
name='phoneNumber',
field=models.CharField(max_length=16, unique=True, validators=[django.core.validators.RegexValidator(regex='^\\+?1?\\d{8,15}$')], verbose_name='Номер телефона для связи'),
),
migrations.AlterField(
model_name='apartament',
name='price',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(450000)], verbose_name='Стоимость аренды квартиры за месяц'),
),
migrations.AlterField(
model_name='apartament',
name='rooms',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(10)], verbose_name='Количество комнат'),
),
migrations.AlterField(
model_name='apartament',
name='timeToBus',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(60)], verbose_name='Время до ближайшей автобусной остановки в минутах'),
),
migrations.AlterField(
model_name='apartament',
name='timeToTrain',
field=models.IntegerField(validators=[django.core.validators.MaxValueValidator(60)], verbose_name='Время до ближайшей Ж/Д станции в минутах'),
),
migrations.AlterField(
model_name='apartament',
name='utilitiesPrice',
field=models.CharField(max_length=100, verbose_name='Стоимость коммунальных услуг'),
),
migrations.CreateModel(
name='Photo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(upload_to='photos/%Y/%m/%d')),
('apartament', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pairent_app.apartament', verbose_name='Квартира')),
],
options={
'verbose_name': 'Фотография',
'verbose_name_plural': 'Фотографии',
},
),
migrations.AddField(
model_name='apartament',
name='views',
field=models.ManyToManyField(blank=True, related_name='post_views', to='pairent_app.ipaddresses'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 4.1.7 on 2023-04-17 12:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pairent_app', '0002_ipaddresses_alter_apartament_options_and_more'),
]
operations = [
migrations.AlterField(
model_name='photo',
name='image',
field=models.ImageField(upload_to='photos/%Y/%m/%d', verbose_name='Фотография'),
),
]

View File

@ -1,55 +1,79 @@
import uuid
from django.db import models
from django.core.validators import RegexValidator
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="Стоимость аренды квартиры за месяц")
bail = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Стоимость залога квартиры")
agencyСommission = models.IntegerField(validators=[MaxValueValidator(450000)], verbose_name="Коммисия агенству")
utilitiesPrice = models.CharField(max_length=100, verbose_name="Стоимость коммунальных услуг")
minimumLeasePeriod = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Минимальный срок аренды в месяцах")
id = models.UUIDField(primary_key=True, default=uuid.uuid4, edtitable=False, help_text="Уникальный индетификатор квартиры")
address = models.CharField(max_length=100, verbose_name="Адрес квартиры")
description = models.TextField(max_length=300, verbose_name="Описание квартиры")
# TODO: Нужно реализовать фотографии. Как вариант, сделать как в этой статье (https://habr.com/ru/articles/505946/)
price = models.IntegerField(max_value=450000, help_text="Стоимость аренды квартиры за месяц")
bail = models.IntegerField(max_value=450000, help_text="Стоимость залога квартиры")
agencyСommission = models.IntegerField(max_value=450000, verbose_name="Коммисия агенству")
utilitiesPrice = models.CharField(max_length=100, help_text="Стоимость коммунальных услуг")
minimumLeasePeriod = models.IntegerField(max_value=60, help_text="Минимальный срок аренды в месяцах")
address = models.CharField(max_length=100, help_text="Адрес квартиры")
description = models.TextField(max_length=300, help_text="Описание квартиры")
perimetrs = models.FloatField(max_value=250, help_text="Количество квадратных метров")
rooms = models.IntegerField(max_value=10, help_text="Количество комнат")
ceilingHeight = models.FloatField(max_value=5, help_text="Высота потолков в метрах")
floor = models.IntegerField(max_value=50, help_text="Этаж квартиры")
floorHouse = models.IntegerField(max_value=50, help_text="Количество этажей в доме")
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, help_text="Номер телефона для связи")
phoneNumber = models.CharField(validators=[phoneNumberRegex], max_length=16, unique=True, verbose_name="Номер телефона для связи")
timeToBus = models.IntegerField(max_value=60, help_text="Время до ближайшей автобусной остановки в минутах")
timeToTrain = models.IntegerField(max_value=60, help_text="Время до ближайшей Ж/Д станции в минутах")
timeToBus = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей автобусной остановки в минутах")
timeToTrain = models.IntegerField(validators=[MaxValueValidator(60)], verbose_name="Время до ближайшей Ж/Д станции в минутах")
"""Параметры квартиры"""
isFurniture = models.BooleanField(help_text="Имеется мебель в квартире")
isAnimal = models.BooleanField(help_text="Можно с питомцем")
isTelevision = models.BooleanField(help_text="Имеется телевизор в квартире")
isСhild = models.BooleanField(help_text="Можно с детьми")
isInternet = models.BooleanField(help_text="Проведен интернет в квартире")
isBathroom = models.BooleanField(help_text="Имеется санузел в квартире")
isRefrigerator = models.BooleanField(help_text="Имеется холодильник в квартире")
isWasher = models.BooleanField(help_text="Имеется стиральная машинка в квартире")
isAirConditioning = models.BooleanField(help_text="Имеется кондиционер в квартире")
isFreshRepair = models.BooleanField(help_text="Недавно был ремонт в квартире")
isFurniture = models.BooleanField(verbose_name="Имеется мебель в квартире")
isAnimal = models.BooleanField(verbose_name="Можно с питомцем")
isTelevision = models.BooleanField(verbose_name="Имеется телевизор в квартире")
isСhild = 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(help_text="Имеется лифт в доме")
isParking = models.BooleanField(help_text="Имеется закрытая парковка у дома")
isGarbageChute = models.BooleanField(help_text="Имеется мусоропровод в доме")
isConcierge = models.BooleanField(help_text="Имеется консьерж в доме")
isElevator = models.BooleanField(verbose_name="Имеется лифт в доме")
isParking = models.BooleanField(verbose_name="Имеется закрытая парковка у дома")
isGarbageChute = models.BooleanField(verbose_name="Имеется мусоропровод в доме")
isConcierge = models.BooleanField(verbose_name="Имеется консьерж в доме")
# TODO: Нужно реализовать количество просмотров. Как вариант, сделать через IP (https://ru.stackoverflow.com/q/1233137)
views = models.ManyToManyField(IPAddresses, related_name="post_views", blank=True)
dateCreate = models.DateField(auto_now_add=True, editable=False, help_text="Дата добавления квартиры")
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 = "Фотографии"

View File

@ -1,3 +1,2 @@
django
mysqlclient
Pillow
mysqlclient