""" 用户地址模型 """ from datetime import datetime from config.database import db class UserAddress(db.Model): """用户地址模型""" __tablename__ = 'user_addresses' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) receiver_name = db.Column(db.String(50), nullable=False) receiver_phone = db.Column(db.String(20), nullable=False) province = db.Column(db.String(50), nullable=False) city = db.Column(db.String(50), nullable=False) district = db.Column(db.String(50), nullable=False) detail_address = db.Column(db.String(200), nullable=False) postal_code = db.Column(db.String(10)) is_default = db.Column(db.Integer, default=0) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 关联关系 user = db.relationship('User', backref='addresses') def get_full_address(self): """获取完整地址""" return f"{self.province} {self.city} {self.district} {self.detail_address}" def to_dict(self): """转换为字典""" return { 'id': self.id, 'user_id': self.user_id, 'receiver_name': self.receiver_name, 'receiver_phone': self.receiver_phone, 'province': self.province, 'city': self.city, 'district': self.district, 'detail_address': self.detail_address, 'postal_code': self.postal_code, 'full_address': self.get_full_address(), 'is_default': self.is_default, 'created_at': self.created_at.isoformat() if self.created_at else None } @classmethod def set_default_address(cls, user_id, address_id): """设置默认地址""" try: # 先取消所有默认地址 cls.query.filter_by(user_id=user_id).update({'is_default': 0}) # 设置新的默认地址 address = cls.query.filter_by(id=address_id, user_id=user_id).first() if address: address.is_default = 1 db.session.commit() return True return False except Exception: db.session.rollback() return False @classmethod def get_default_address(cls, user_id): """获取默认地址""" return cls.query.filter_by(user_id=user_id, is_default=1).first() @classmethod def get_user_addresses(cls, user_id): """获取用户所有地址""" return cls.query.filter_by(user_id=user_id).order_by( cls.is_default.desc(), cls.created_at.desc() ).all() def __repr__(self): return f''