# 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')}, }, ), ]