# Generated by Django 5.2.1 on 2025-06-17 04:07 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='City', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=50, verbose_name='城市名称')), ('code', models.CharField(max_length=20, unique=True, verbose_name='城市代码')), ('description', models.TextField(blank=True, verbose_name='城市描述')), ('image', models.ImageField(blank=True, null=True, upload_to='cities/', verbose_name='城市图片')), ('is_hot', 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='更新时间')), ], options={ 'verbose_name': '城市', 'verbose_name_plural': '城市', }, ), migrations.CreateModel( name='DayPlan', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('day', models.PositiveSmallIntegerField(verbose_name='第几天')), ('theme', models.CharField(max_length=100, verbose_name='当日主题')), ('description', models.TextField(blank=True, verbose_name='当日描述')), ('transport', models.CharField(blank=True, max_length=200, verbose_name='交通方式')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ], options={ 'verbose_name': '每日计划', 'verbose_name_plural': '每日计划', 'ordering': ['travel_plan', 'day'], }, ), migrations.CreateModel( name='Attraction', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=100, verbose_name='景点名称')), ('description', models.TextField(verbose_name='景点描述')), ('short_desc', models.CharField(max_length=200, verbose_name='简短描述')), ('address', models.CharField(max_length=200, verbose_name='地址')), ('ticket_price', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='门票价格')), ('open_hours', models.CharField(blank=True, max_length=100, verbose_name='开放时间')), ('image', models.ImageField(blank=True, null=True, upload_to='attractions/', verbose_name='景点图片')), ('tags', models.JSONField(default=list, verbose_name='标签')), ('is_featured', 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='更新时间')), ('city', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attractions', to='ai_planner.city', verbose_name='所属城市')), ], options={ 'verbose_name': '景点', 'verbose_name_plural': '景点', }, ), migrations.CreateModel( name='DayPlanAttraction', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('order', models.PositiveSmallIntegerField(verbose_name='顺序')), ('visit_time', models.CharField(blank=True, max_length=50, verbose_name='参观时间')), ('notes', models.TextField(blank=True, verbose_name='备注')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('attraction', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ai_planner.attraction', verbose_name='景点')), ('day_plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attractions', to='ai_planner.dayplan', verbose_name='每日计划')), ], options={ 'verbose_name': '每日计划景点', 'verbose_name_plural': '每日计划景点', 'ordering': ['day_plan', 'order'], }, ), migrations.CreateModel( name='TravelPlan', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100, verbose_name='行程标题')), ('description', models.TextField(verbose_name='行程描述')), ('days', models.PositiveSmallIntegerField(verbose_name='天数')), ('suitable_for', models.CharField(blank=True, max_length=100, verbose_name='适合人群')), ('status', models.CharField(choices=[('generating', '生成中'), ('completed', '已完成'), ('failed', '失败')], default='generating', max_length=20, verbose_name='状态')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='travel_plans', to=settings.AUTH_USER_MODEL, verbose_name='用户')), ], options={ 'verbose_name': '旅行计划', 'verbose_name_plural': '旅行计划', }, ), migrations.AddField( model_name='dayplan', name='travel_plan', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='day_plans', to='ai_planner.travelplan', verbose_name='旅行计划'), ), migrations.CreateModel( name='UserPreference', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('days', models.PositiveSmallIntegerField(verbose_name='旅行天数')), ('interests', models.JSONField(default=list, verbose_name='兴趣偏好')), ('transport', models.CharField(choices=[('walking', '步行'), ('driving', '自驾'), ('public', '公共交通'), ('mixed', '混合')], max_length=20, verbose_name='出行方式')), ('custom_requirements', models.TextField(blank=True, verbose_name='特殊需求')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('cities', models.ManyToManyField(to='ai_planner.city', verbose_name='选择城市')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='preferences', to=settings.AUTH_USER_MODEL, verbose_name='用户')), ], options={ 'verbose_name': '用户偏好', 'verbose_name_plural': '用户偏好', }, ), migrations.AddField( model_name='travelplan', name='preference', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='plans', to='ai_planner.userpreference', verbose_name='偏好设置'), ), ]