91 lines
3.6 KiB
Python
91 lines
3.6 KiB
Python
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'),
|
|
]
|
|
|
|
PROFILE_CHOICES = [
|
|
('tiktok', 'TikTok'),
|
|
('instagram', 'Instagram'),
|
|
('youtube', 'YouTube'),
|
|
('xiaohongshu', '小红书'),
|
|
('other', '其他平台'),
|
|
]
|
|
|
|
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="抖音链接")
|
|
hashtags = models.TextField(blank=True, null=True, verbose_name="标签")
|
|
trends = models.TextField(blank=True, null=True, verbose_name="趋势")
|
|
profile = models.CharField(max_length=20, choices=PROFILE_CHOICES, default='tiktok', verbose_name="达人平台")
|
|
|
|
class Meta:
|
|
verbose_name = "创作者"
|
|
verbose_name_plural = "创作者"
|
|
ordering = ['name']
|
|
|
|
def __str__(self):
|
|
return self.name
|