add model photo and ipaddresses and change model apartament
This commit is contained in:
parent
bd35be6cd3
commit
9638619fe2
|
@ -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)
|
||||
|
|
|
@ -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='Дата добавления квартиры')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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='Фотография'),
|
||||
),
|
||||
]
|
|
@ -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 = "Фотографии"
|
|
@ -1,3 +1,2 @@
|
|||
django
|
||||
mysqlclient
|
||||
Pillow
|
Loading…
Reference in New Issue