generated from daniil-berg/boilerplate-py
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from uuid import uuid4
|
|
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql.schema import Column, ForeignKey as FKey
|
|
from sqlalchemy.sql.sqltypes import Integer, String, Unicode
|
|
from sqlalchemy_utils.types import CountryType, UUIDType
|
|
|
|
from .base import AbstractBase
|
|
|
|
|
|
__all__ = [
|
|
'StateProvince',
|
|
'City',
|
|
'Street',
|
|
'Address',
|
|
]
|
|
|
|
|
|
class StateProvince(AbstractBase):
|
|
__tablename__ = 'state_province'
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
country = Column(CountryType, nullable=False, index=True)
|
|
name = Column(Unicode(255), nullable=False, index=True)
|
|
|
|
cities = relationship('City', backref='state_province', lazy='selectin')
|
|
|
|
|
|
class City(AbstractBase):
|
|
__tablename__ = 'city'
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
state_province_id = Column(Integer, FKey('state_province.id', ondelete='RESTRICT'), nullable=False, index=True)
|
|
zip_code = Column(String(5), nullable=False, index=True)
|
|
name = Column(Unicode(255), nullable=False, index=True)
|
|
|
|
streets = relationship('Street', backref='city', lazy='selectin')
|
|
|
|
|
|
class Street(AbstractBase):
|
|
__tablename__ = 'street'
|
|
|
|
id = Column(Integer, primary_key=True)
|
|
city_id = Column(Integer, FKey('city.id', ondelete='RESTRICT'), nullable=False, index=True)
|
|
name = Column(Unicode(255), nullable=False, index=True)
|
|
|
|
addresses = relationship('Address', backref='street', lazy='selectin')
|
|
|
|
|
|
class Address(AbstractBase):
|
|
__tablename__ = 'address'
|
|
|
|
id = Column(UUIDType, primary_key=True, default=uuid4)
|
|
street_id = Column(Integer, FKey('street.id', ondelete='RESTRICT'), nullable=False, index=True)
|
|
house_number = Column(String(8), nullable=False)
|
|
supplement = Column(String(255))
|