Files
tripwithbonus/backend/routes/models.py
2025-05-15 19:50:13 +03:00

115 lines
5.0 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.contrib.auth.models import User
from routes.constants.routeChoices import owner_type_choices, type_transport_choices, cargo_type_choices
class Country(models.Model):
international_name = models.CharField(max_length=250, verbose_name=('Международное название'), blank=True, null=True)
official_name = models.CharField(max_length=250, verbose_name=('Официальное название'), blank=True, null=True)
short_code = models.CharField(max_length=2, verbose_name=('Код страны по ISO3166-1:alpha2'))
code = models.CharField(max_length=3, verbose_name=('Код страны по ISO3166-1:alpha3'))
num_code = models.CharField(max_length=3, verbose_name=('Код страны по ISO3166-1:numeric'), blank=True, null=True)
flag_img_url = models.URLField(verbose_name=('Ссылка на изображение флага'), blank=True, null=True)
geo_lat = models.CharField(max_length=20, verbose_name=('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name=('GPS долгота'), blank=True, null=True)
timezone = models.CharField(max_length=250, verbose_name=('Часовая зона'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name=('Дата и время завершения парсинга'), blank=True, null=True)
flag = models.ImageField(
upload_to='uploads/flags/', verbose_name=('Флаг'),
null=True, blank=True, help_text=u'')
def __str__(self):
if self.international_name:
return f'{self.international_name}'
elif self.official_name:
return f'{self.official_name}'
elif self.code:
return f'{self.code}'
class Meta:
verbose_name = ('Страна')
verbose_name_plural = ('Страны')
ordering = ('international_name', 'code')
class City(models.Model):
country = models.ForeignKey(
Country, verbose_name=('Страна'), related_name='rel_cities_for_country', on_delete=models.CASCADE)
name = models.CharField(max_length=30, verbose_name=('Название города'), blank=True, null=True)
geo_lat = models.CharField(max_length=20, verbose_name=('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name=('GPS долгота'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True)
timezone = models.CharField(max_length=250, verbose_name=('Часовая зона'), blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name=('Дата и время завершения парсинга'), blank=True, null=True)
def __str__(self):
return f'{self.name}'
class Meta:
verbose_name = ('Город')
verbose_name_plural = ('Города')
ordering = ('name',)
class Route(models.Model):
owner_type = models.CharField(
choices=owner_type_choices, default='customer', verbose_name=('Тип операции'))
type_transport = models.CharField(
choices=type_transport_choices, default='', verbose_name=('Выберите способ перевозки'),
blank=True
)
departure_DT = models.DateTimeField(
verbose_name=('Дата и время выезда'), null=True, blank=True
)
arrival_DT = models.DateTimeField(verbose_name=('Дата и время прибытия'))
from_city = models.ForeignKey(
City, verbose_name=('Город отправки'), related_name='rel_routes_for_cityFrom', on_delete=models.SET_NULL,
null=True, blank=True
)
to_city = models.ForeignKey(
City, verbose_name=('Город получения'), related_name='rel_routes_for_cityTo', on_delete=models.SET_NULL,
null=True, blank=True
)
cargo_type = models.CharField(
choices=cargo_type_choices, default='letter', verbose_name=('Могу перевезти')
)
receive_msg_by_email = models.BooleanField(default=False, verbose_name=('Получать уведомления по E-mail'))
owner = models.ForeignKey(User, verbose_name=('Владелец'), related_name='rel_routes_for_owner', on_delete=models.CASCADE)
comment = models.TextField(verbose_name='Примечания', null=True, blank=True)
rising_DT = models.DateTimeField(
verbose_name=('Дата и время последнего поднятия'),
blank=True, null=True
)
highlight_end_DT = models.DateTimeField(
verbose_name=('Дата и время окончания выделения'),
blank=True, null=True
)
def __str__(self):
if self.owner:
return f'{self.owner}'
else:
return str(self.owner_type)
class Meta:
verbose_name = (u'Маршрут')
verbose_name_plural = (u'Маршруты')
ordering = ('id',)