from django.db import models from django.utils import timezone def get_current_date(): """返回当前日期(非日期时间)""" return timezone.now().date() class SearchSession(models.Model): """搜索历史记录""" session_number = models.IntegerField(default=1, verbose_name="会话编号") creator_count = models.IntegerField(default=0, verbose_name="创作者数量") shoppable_creators = models.IntegerField(default=0, verbose_name="可购物创作者数量") avg_followers = models.FloatField(default=0, verbose_name="平均粉丝数") avg_gmv = models.FloatField(default=0, verbose_name="平均GMV") avg_video_views = models.FloatField(default=0, verbose_name="平均视频观看量") date_created = models.DateField(default=get_current_date, verbose_name="创建日期") class Meta: verbose_name = "搜索会话" verbose_name_plural = "搜索会话" ordering = ['-date_created'] def __str__(self): return f"会话 {self.session_number} - {self.date_created}" class Creator(models.Model): """创作者信息""" ECOMMERCE_LEVELS = [ ('L1', 'Level 1'), ('L2', 'Level 2'), ('L3', 'Level 3'), ('L4', 'Level 4'), ('L5', 'Level 5'), ('New tag', 'New Tag'), ] EXPOSURE_LEVELS = [ ('KOC-1', 'KOC-1'), ('KOC-2', 'KOC-2'), ('KOL-2', 'KOL-2'), ('KOL-3', 'KOL-3'), ('New tag', 'New Tag'), ] CATEGORIES = [ ('Phones & Electronics', 'Phones & Electronics'), ('Womenswear & Underwear', 'Womenswear & Underwear'), ('Sports & Outdoor', 'Sports & Outdoor'), ('Food & Beverage', 'Food & Beverage'), ('Health', 'Health'), ('Kitchenware', 'Kitchenware'), ('Furniture', 'Furniture'), ('Shoes', 'Shoes'), ('Home Supplies', 'Home Supplies'), ] session = models.ForeignKey(SearchSession, on_delete=models.CASCADE, related_name='creators', verbose_name="所属会话") name = models.CharField(max_length=100, verbose_name="创作者名称") avatar = models.URLField(blank=True, null=True, verbose_name="头像URL") category = models.CharField(max_length=50, choices=CATEGORIES, verbose_name="类别") ecommerce_level = models.CharField(max_length=10, choices=ECOMMERCE_LEVELS, verbose_name="电商等级") exposure_level = models.CharField(max_length=10, choices=EXPOSURE_LEVELS, verbose_name="曝光等级") followers = models.FloatField(default=0, verbose_name="粉丝数") gmv = models.FloatField(default=0, verbose_name="GMV") items_sold = models.FloatField(default=0, verbose_name="销售项目数") avg_video_views = models.FloatField(default=0, verbose_name="平均视频观看量") has_ecommerce = models.BooleanField(default=False, verbose_name="是否有电商") tiktok_url = models.URLField(blank=True, null=True, verbose_name="抖音链接") class Meta: verbose_name = "创作者" verbose_name_plural = "创作者" ordering = ['name'] def __str__(self): return self.name