daren/apps/discovery/models.py
2025-05-23 17:18:51 +08:00

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