lty/qy_lty/food_app/migrations/0001_initial.py
2026-03-17 13:17:02 +08:00

377 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Generated by Django 5.2.5 on 2025-08-28 05:18
import card.storage
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="Food",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="食物名称")),
(
"food_type",
models.CharField(
choices=[
("fruit", "水果"),
("vegetable", "蔬菜"),
("meat", "肉类"),
("seafood", "海鲜"),
("dairy", "乳制品"),
("grain", "谷物"),
("snack", "零食"),
("drink", "饮品"),
("dessert", "甜品"),
("spice", "调料"),
("other", "其他"),
],
max_length=20,
verbose_name="食物类型",
),
),
(
"description",
models.TextField(blank=True, null=True, verbose_name="食物描述"),
),
(
"rarity",
models.CharField(
choices=[
("common", "普通"),
("uncommon", "不常见"),
("rare", "稀有"),
("epic", "史诗"),
("legendary", "传说"),
("mythic", "神话"),
],
default="common",
max_length=20,
verbose_name="稀有程度",
),
),
(
"image",
models.ImageField(
blank=True,
help_text="食物的展示图片",
null=True,
storage=card.storage.OSSStorage(base_dir="foods"),
upload_to="images/",
verbose_name="食物图片",
),
),
(
"animation_file",
models.FileField(
blank=True,
help_text="食物的动画文件支持gif/mp4等格式",
null=True,
storage=card.storage.OSSStorage(base_dir="foods"),
upload_to="animations/",
verbose_name="动画文件",
),
),
(
"sound_effect",
models.FileField(
blank=True,
help_text="食物相关的音效文件,如咀嚼声、烹饪声等",
null=True,
storage=card.storage.OSSStorage(base_dir="foods"),
upload_to="sounds/",
verbose_name="音效文件",
),
),
(
"calories",
models.PositiveIntegerField(
blank=True,
help_text="每100g的卡路里",
null=True,
verbose_name="卡路里",
),
),
(
"taste_tags",
models.CharField(
blank=True,
help_text="用逗号分隔,如:甜,酸,脆",
max_length=200,
null=True,
verbose_name="口味标签",
),
),
(
"cooking_methods",
models.TextField(blank=True, null=True, verbose_name="烹饪方法"),
),
(
"nutritional_value",
models.TextField(blank=True, null=True, verbose_name="营养价值"),
),
(
"effect_description",
models.TextField(
blank=True,
help_text="在游戏中的特殊效果",
null=True,
verbose_name="效果描述",
),
),
(
"boost_attributes",
models.JSONField(
blank=True,
help_text="JSON格式的属性加成数据",
null=True,
verbose_name="属性加成",
),
),
(
"unlock_condition",
models.TextField(blank=True, null=True, verbose_name="解锁条件"),
),
(
"usage_limit",
models.PositiveIntegerField(
blank=True,
help_text="0表示无限制",
null=True,
verbose_name="使用次数限制",
),
),
(
"status",
models.CharField(
choices=[
("draft", "草稿"),
("published", "已发布"),
("archived", "已归档"),
],
default="draft",
max_length=20,
verbose_name="状态",
),
),
(
"is_limited",
models.BooleanField(default=False, verbose_name="限时食物"),
),
(
"available_from",
models.DateTimeField(
blank=True, null=True, verbose_name="开始时间"
),
),
(
"available_until",
models.DateTimeField(
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="更新时间"),
),
(
"published_at",
models.DateTimeField(
blank=True, null=True, verbose_name="发布时间"
),
),
],
options={
"verbose_name": "食物",
"verbose_name_plural": "食物",
"ordering": ["-created_at"],
"indexes": [
models.Index(fields=["name"], name="food_app_fo_name_28ef64_idx"),
models.Index(
fields=["food_type"], name="food_app_fo_food_ty_97e8ea_idx"
),
models.Index(
fields=["rarity"], name="food_app_fo_rarity_d9a2f0_idx"
),
models.Index(
fields=["status"], name="food_app_fo_status_be68b4_idx"
),
models.Index(
fields=["created_at"], name="food_app_fo_created_e9bf8b_idx"
),
],
},
),
migrations.CreateModel(
name="FoodUsageLog",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"used_at",
models.DateTimeField(auto_now_add=True, verbose_name="使用时间"),
),
(
"effect_applied",
models.JSONField(
blank=True,
help_text="JSON格式的效果数据",
null=True,
verbose_name="应用效果",
),
),
("notes", models.TextField(blank=True, null=True, verbose_name="备注")),
(
"usage_context",
models.CharField(
blank=True,
help_text="如:战斗中、休息时、特殊活动等",
max_length=100,
null=True,
verbose_name="使用场景",
),
),
(
"food",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="usage_logs",
to="food_app.food",
verbose_name="食物",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="food_usage_logs",
to=settings.AUTH_USER_MODEL,
verbose_name="用户",
),
),
],
options={
"verbose_name": "食物使用记录",
"verbose_name_plural": "食物使用记录",
"ordering": ["-used_at"],
"indexes": [
models.Index(
fields=["user"], name="food_app_fo_user_id_979fc1_idx"
),
models.Index(
fields=["food"], name="food_app_fo_food_id_210b62_idx"
),
models.Index(
fields=["used_at"], name="food_app_fo_used_at_c7731d_idx"
),
],
},
),
migrations.CreateModel(
name="UserFood",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"quantity",
models.PositiveIntegerField(default=1, verbose_name="拥有数量"),
),
(
"used_count",
models.PositiveIntegerField(default=0, verbose_name="已使用次数"),
),
(
"obtained_at",
models.DateTimeField(auto_now_add=True, verbose_name="获得时间"),
),
(
"obtained_method",
models.CharField(
blank=True,
help_text="如:购买、奖励、活动等",
max_length=50,
null=True,
verbose_name="获得方式",
),
),
(
"last_used_at",
models.DateTimeField(
blank=True, null=True, verbose_name="最后使用时间"
),
),
(
"food",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="users",
to="food_app.food",
verbose_name="食物",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="foods",
to=settings.AUTH_USER_MODEL,
verbose_name="用户",
),
),
],
options={
"verbose_name": "用户食物",
"verbose_name_plural": "用户食物",
"ordering": ["-obtained_at"],
"indexes": [
models.Index(
fields=["user"], name="food_app_us_user_id_a2075b_idx"
),
models.Index(
fields=["food"], name="food_app_us_food_id_ea7000_idx"
),
models.Index(
fields=["obtained_at"], name="food_app_us_obtaine_13d155_idx"
),
],
"unique_together": {("user", "food")},
},
),
]