295 lines
23 KiB
Python
295 lines
23 KiB
Python
# Generated by Django 5.2.1 on 2025-05-29 09:24
|
|
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
('brands', '0001_initial'),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='CreatorProfile',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=255, verbose_name='达人名称')),
|
|
('avatar', models.ImageField(blank=True, null=True, upload_to='avatars/', verbose_name='头像图片')),
|
|
('avatar_url', models.TextField(blank=True, null=True, verbose_name='头像URL')),
|
|
('platform_id', models.CharField(blank=True, max_length=255, null=True, verbose_name='Platform ID')),
|
|
('email', models.EmailField(blank=True, max_length=255, null=True, verbose_name='电子邮箱')),
|
|
('instagram', models.CharField(blank=True, max_length=255, null=True, verbose_name='Instagram账号')),
|
|
('location', models.CharField(blank=True, max_length=100, null=True, verbose_name='位置')),
|
|
('live_schedule', models.CharField(blank=True, max_length=255, null=True, verbose_name='直播时间表')),
|
|
('profile', models.CharField(choices=[('tiktok', 'TikTok'), ('instagram', 'Instagram'), ('youtube', 'YouTube'), ('other', '其他平台')], default='tiktok', max_length=20, verbose_name='达人平台')),
|
|
('hashtags', models.TextField(blank=True, help_text='以#分隔的标签,例如:#fashion#beauty#lifestyle', null=True, verbose_name='标签')),
|
|
('trends', models.TextField(blank=True, help_text='创作者相关的趋势关键词', null=True, verbose_name='趋势')),
|
|
('region', models.CharField(blank=True, max_length=100, null=True, verbose_name='地区')),
|
|
('tiktok_link', models.URLField(blank=True, max_length=500, null=True, verbose_name='主页链接')),
|
|
('us_creator_level', models.CharField(blank=True, max_length=50, null=True, verbose_name='对标美区达人等级')),
|
|
('price_gbp', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='报价(英镑)')),
|
|
('price_usd', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='报价(美金)')),
|
|
('gmv_gbp', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='GMV(英镑)')),
|
|
('link', models.URLField(blank=True, max_length=500, null=True, verbose_name='链接')),
|
|
('category', models.CharField(blank=True, choices=[('Phones & Electronics', '手机与电子产品'), ('Homes Supplies', '家居用品'), ('Kitchenware', '厨房用品'), ('Textiles & Soft Furnishings', '纺织品和软装'), ('Household Appliances', '家用电器'), ('Womenswear & Underwear', '女装和内衣'), ('Muslim Fashion', '穆斯林时尚'), ('Shoes', '鞋类'), ('Beauty & Personal Care', '美容和个人护理'), ('Computers & Office Equipment', '电脑和办公设备'), ('Pet Supplies', '宠物用品'), ('Baby & Maternity', '婴儿和孕妇用品'), ('Sports & Outdoor', '运动和户外'), ('Toys', '玩具'), ('Furniture', '家具'), ('Tools & Hardware', '工具和硬件'), ('Home Improvement', '家居装修'), ('Automotive & Motorcycle', '汽车和摩托车'), ('Fashion Accessories', '时尚配饰'), ('Food & Beverages', '食品和饮料'), ('Health', '健康'), ('Books, Magazines & Audio', '书籍、杂志和音频'), ('Kids Fashion', '儿童时尚'), ('Menswear & Underwear', '男装和内衣'), ('Luggage & Bags', '行李和包'), ('Pre-Owned Collections', '二手收藏'), ('Jewellery Accessories & Derivatives', '珠宝配饰及衍生品')], max_length=100, null=True, verbose_name='类别')),
|
|
('e_commerce_level', models.IntegerField(blank=True, choices=[(1, 'L1'), (2, 'L2'), (3, 'L3'), (4, 'L4'), (5, 'L5'), (6, 'L6'), (7, 'L7')], null=True, verbose_name='电商能力等级')),
|
|
('exposure_level', models.CharField(blank=True, choices=[('KOC-1', 'KOC-1'), ('KOC-2', 'KOC-2'), ('KOL-1', 'KOL-1'), ('KOL-2', 'KOL-2'), ('KOL-3', 'KOL-3')], max_length=10, null=True, verbose_name='曝光等级')),
|
|
('followers', models.IntegerField(default=0, verbose_name='粉丝数')),
|
|
('gmv', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='GMV(千美元)')),
|
|
('items_sold', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True, verbose_name='售出商品数量')),
|
|
('avg_video_views', models.IntegerField(blank=True, default=0, null=True, verbose_name='平均视频浏览量')),
|
|
('pricing', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='个人定价')),
|
|
('pricing_package', models.CharField(blank=True, max_length=100, null=True, verbose_name='套餐定价')),
|
|
('collab_count', models.IntegerField(blank=True, default=0, null=True, verbose_name='合作次数')),
|
|
('latest_collab', models.CharField(blank=True, max_length=100, null=True, verbose_name='最新合作')),
|
|
('e_commerce_platforms', models.JSONField(blank=True, null=True, verbose_name='电商平台')),
|
|
('gmv_by_channel', models.JSONField(blank=True, null=True, verbose_name='GMV按渠道分布')),
|
|
('gmv_by_category', models.JSONField(blank=True, null=True, verbose_name='GMV按类别分布')),
|
|
('mcn', models.CharField(blank=True, max_length=255, null=True, verbose_name='MCN机构')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
],
|
|
options={
|
|
'verbose_name': '达人信息',
|
|
'verbose_name_plural': '达人信息',
|
|
'db_table': 'creator_profiles',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='BrandCampaign',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('brand_id', models.CharField(choices=[('U', 'U品牌'), ('R', 'R品牌'), ('X', 'X品牌'), ('Q', 'Q品牌'), ('A', 'A品牌'), ('M', 'M品牌')], max_length=10, verbose_name='品牌ID')),
|
|
('brand_name', models.CharField(default='brand', max_length=255, verbose_name='品牌名称')),
|
|
('brand_color', models.CharField(default='#000000', max_length=20, verbose_name='品牌颜色')),
|
|
('pricing_detail', models.CharField(max_length=50, verbose_name='价格详情')),
|
|
('start_date', models.DateField(verbose_name='开始日期')),
|
|
('end_date', models.DateField(verbose_name='结束日期')),
|
|
('status', models.CharField(choices=[('completed', '已完成'), ('in_progress', '进行中'), ('rejected', '已拒绝')], max_length=20, verbose_name='状态')),
|
|
('gmv_achieved', models.CharField(max_length=50, verbose_name='实现GMV')),
|
|
('views_achieved', models.CharField(max_length=50, verbose_name='实现观看量')),
|
|
('video_link', models.URLField(blank=True, max_length=255, null=True, verbose_name='视频链接')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('campaign', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='brand_campaigns', to='brands.campaign', verbose_name='关联活动')),
|
|
],
|
|
options={
|
|
'verbose_name': '品牌活动数据',
|
|
'verbose_name_plural': '品牌活动数据',
|
|
'db_table': 'brand_campaigns',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='CollaborationMetrics',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('avg_commission_rate', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='平均佣金率(%)')),
|
|
('products_count', models.IntegerField(verbose_name='产品数量')),
|
|
('brand_collaborations', models.IntegerField(verbose_name='品牌合作数量')),
|
|
('min_product_price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='最低产品价格($)')),
|
|
('max_product_price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='最高产品价格($)')),
|
|
('start_date', models.DateField(verbose_name='开始日期')),
|
|
('end_date', models.DateField(verbose_name='结束日期')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='collaboration_metrics', to='daren_detail.creatorprofile', verbose_name='创作者')),
|
|
],
|
|
options={
|
|
'verbose_name': '协作指标',
|
|
'verbose_name_plural': '协作指标',
|
|
'db_table': 'collaboration_metrics',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='CreatorVideo',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('title', models.CharField(max_length=255, verbose_name='视频标题')),
|
|
('description', models.TextField(blank=True, null=True, verbose_name='视频描述')),
|
|
('thumbnail_url', models.URLField(blank=True, max_length=500, null=True, verbose_name='缩略图URL')),
|
|
('video_url', models.URLField(blank=True, max_length=500, null=True, verbose_name='视频URL')),
|
|
('video_id', models.CharField(max_length=100, verbose_name='视频ID')),
|
|
('video_type', models.CharField(choices=[('regular', '普通视频'), ('product', '带产品视频')], default='regular', max_length=20, verbose_name='视频类型')),
|
|
('badge', models.CharField(blank=True, choices=[('red', '红色标记'), ('gold', '金色标记')], max_length=20, null=True, verbose_name='视频标记')),
|
|
('view_count', models.IntegerField(default=0, verbose_name='观看次数')),
|
|
('like_count', models.IntegerField(default=0, verbose_name='点赞数')),
|
|
('comment_count', models.IntegerField(default=0, verbose_name='评论数')),
|
|
('has_product', models.BooleanField(default=False, verbose_name='是否有产品')),
|
|
('product_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='产品名称')),
|
|
('product_url', models.URLField(blank=True, max_length=500, null=True, verbose_name='产品链接')),
|
|
('release_date', models.DateField(verbose_name='发布日期')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='videos', to='daren_detail.creatorprofile')),
|
|
],
|
|
options={
|
|
'verbose_name': '创作者视频',
|
|
'verbose_name_plural': '创作者视频',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='FollowerMetrics',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('start_date', models.DateField()),
|
|
('end_date', models.DateField()),
|
|
('female_percentage', models.FloatField(default=0)),
|
|
('male_percentage', models.FloatField(default=0)),
|
|
('age_18_24_percentage', models.FloatField(default=0)),
|
|
('age_25_34_percentage', models.FloatField(default=0)),
|
|
('age_35_44_percentage', models.FloatField(default=0)),
|
|
('age_45_54_percentage', models.FloatField(default=0)),
|
|
('age_55_plus_percentage', models.FloatField(default=0)),
|
|
('location_data', models.JSONField(default=dict)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='follower_metrics', to='daren_detail.creatorprofile')),
|
|
],
|
|
options={
|
|
'verbose_name': '粉丝统计',
|
|
'verbose_name_plural': '粉丝统计',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='PrivateCreatorPool',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=255, verbose_name='私有库名称')),
|
|
('description', models.TextField(blank=True, null=True, verbose_name='描述')),
|
|
('is_default', models.BooleanField(default=False, verbose_name='是否为默认库')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('user', models.ForeignKey(db_column='user_id', on_delete=django.db.models.deletion.CASCADE, related_name='private_creators', to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
|
],
|
|
options={
|
|
'verbose_name': '私有达人库',
|
|
'verbose_name_plural': '私有达人库',
|
|
'db_table': 'private_creator_pool',
|
|
'unique_together': {('user', 'name')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='PublicCreatorPool',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='分类')),
|
|
('remark', models.TextField(blank=True, null=True, verbose_name='备注')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='public_pool', to='daren_detail.creatorprofile', verbose_name='达人')),
|
|
],
|
|
options={
|
|
'verbose_name': '公有达人库',
|
|
'verbose_name_plural': '公有达人库',
|
|
'db_table': 'public_creator_pool',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='TrendMetrics',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('date', models.DateField()),
|
|
('gmv', models.FloatField(default=0)),
|
|
('items_sold', models.IntegerField(default=0)),
|
|
('followers_count', models.IntegerField(default=0)),
|
|
('video_views', models.IntegerField(default=0)),
|
|
('engagement_rate', models.FloatField(default=0)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='trend_metrics', to='daren_detail.creatorprofile')),
|
|
],
|
|
options={
|
|
'verbose_name': '趋势指标',
|
|
'verbose_name_plural': '趋势指标',
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='CreatorCampaign',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('status', models.CharField(choices=[('pending', '待处理'), ('accepted', '已接受'), ('rejected', '已拒绝'), ('completed', '已完成')], default='pending', max_length=20, verbose_name='状态')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('campaign', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='creators', to='brands.campaign', verbose_name='活动')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='campaigns', to='daren_detail.creatorprofile', verbose_name='达人')),
|
|
],
|
|
options={
|
|
'verbose_name': '达人活动关联',
|
|
'verbose_name_plural': '达人活动关联',
|
|
'db_table': 'creator_campaigns',
|
|
'unique_together': {('creator', 'campaign')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='LiveMetrics',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('live_type', models.CharField(choices=[('regular', '普通直播'), ('shoppable', '可购物直播')], default='regular', max_length=50, verbose_name='直播类型')),
|
|
('gpm', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='直播GPM($)')),
|
|
('lives_count', models.IntegerField(verbose_name='直播数量')),
|
|
('avg_views', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='平均观看量')),
|
|
('avg_engagement', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='平均互动率(%)')),
|
|
('avg_likes', models.IntegerField(verbose_name='平均点赞数')),
|
|
('start_date', models.DateField(verbose_name='开始日期')),
|
|
('end_date', models.DateField(verbose_name='结束日期')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='live_metrics', to='daren_detail.creatorprofile', verbose_name='创作者')),
|
|
],
|
|
options={
|
|
'verbose_name': '直播指标',
|
|
'verbose_name_plural': '直播指标',
|
|
'db_table': 'live_metrics',
|
|
'unique_together': {('creator', 'live_type', 'start_date', 'end_date')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='PrivateCreatorRelation',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('added_from_public', models.BooleanField(default=True, verbose_name='是否从公有库添加')),
|
|
('notes', models.TextField(blank=True, null=True, verbose_name='笔记')),
|
|
('status', models.CharField(choices=[('active', '活跃'), ('archived', '已归档'), ('favorite', '收藏'), ('public_removed', '公有库已移除')], default='active', max_length=20, verbose_name='状态')),
|
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='添加时间')),
|
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='private_pool_relations', to='daren_detail.creatorprofile', verbose_name='达人')),
|
|
('private_pool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='creator_relations', to='daren_detail.privatecreatorpool', verbose_name='私有达人库')),
|
|
],
|
|
options={
|
|
'verbose_name': '私有库达人关联',
|
|
'verbose_name_plural': '私有库达人关联',
|
|
'db_table': 'private_creator_relations',
|
|
'unique_together': {('private_pool', 'creator')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='VideoMetrics',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('video_type', models.CharField(choices=[('regular', '普通视频'), ('shoppable', '可购物视频')], default='regular', max_length=50, verbose_name='视频类型')),
|
|
('gpm', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='视频GPM($)')),
|
|
('videos_count', models.IntegerField(verbose_name='视频数量')),
|
|
('avg_views', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='平均观看量')),
|
|
('avg_engagement', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='平均互动率(%)')),
|
|
('avg_likes', models.IntegerField(verbose_name='平均点赞数')),
|
|
('start_date', models.DateField(verbose_name='开始日期')),
|
|
('end_date', models.DateField(verbose_name='结束日期')),
|
|
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
|
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
|
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_metrics', to='daren_detail.creatorprofile', verbose_name='创作者')),
|
|
],
|
|
options={
|
|
'verbose_name': '视频指标',
|
|
'verbose_name_plural': '视频指标',
|
|
'db_table': 'video_metrics',
|
|
'unique_together': {('creator', 'video_type', 'start_date', 'end_date')},
|
|
},
|
|
),
|
|
]
|