65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
"""
|
|
评价模型
|
|
"""
|
|
from datetime import datetime
|
|
import json
|
|
from config.database import db
|
|
|
|
|
|
class Review(db.Model):
|
|
"""商品评价模型"""
|
|
__tablename__ = 'reviews'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
|
product_id = db.Column(db.Integer, db.ForeignKey('products.id'), nullable=False)
|
|
order_id = db.Column(db.Integer, db.ForeignKey('orders.id'), nullable=False)
|
|
rating = db.Column(db.Integer, nullable=False) # 1-5星
|
|
content = db.Column(db.Text)
|
|
images = db.Column(db.Text) # JSON格式存储图片URLs
|
|
is_anonymous = db.Column(db.Integer, default=0)
|
|
status = db.Column(db.Integer, default=1) # 0-隐藏 1-显示
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
# 关联关系
|
|
user = db.relationship('User', backref='reviews')
|
|
product = db.relationship('Product', backref='reviews')
|
|
order = db.relationship('Order', backref='reviews')
|
|
|
|
def get_images(self):
|
|
"""获取评价图片列表"""
|
|
if self.images:
|
|
try:
|
|
return json.loads(self.images)
|
|
except:
|
|
return []
|
|
return []
|
|
|
|
def set_images(self, image_list):
|
|
"""设置评价图片"""
|
|
if isinstance(image_list, list):
|
|
self.images = json.dumps(image_list)
|
|
|
|
def get_rating_stars(self):
|
|
"""获取星级显示"""
|
|
return '★' * self.rating + '☆' * (5 - self.rating)
|
|
|
|
def to_dict(self):
|
|
"""转换为字典"""
|
|
return {
|
|
'id': self.id,
|
|
'user_id': self.user_id,
|
|
'username': self.user.username if not self.is_anonymous else '匿名用户',
|
|
'product_id': self.product_id,
|
|
'order_id': self.order_id,
|
|
'rating': self.rating,
|
|
'rating_stars': self.get_rating_stars(),
|
|
'content': self.content,
|
|
'images': self.get_images(),
|
|
'is_anonymous': self.is_anonymous,
|
|
'created_at': self.created_at.isoformat() if self.created_at else None
|
|
}
|
|
|
|
def __repr__(self):
|
|
return f'<Review {self.id}-{self.rating}星>'
|