diff --git a/api/db.sqlite3 b/api/db.sqlite3 index e939d24..6998b18 100644 Binary files a/api/db.sqlite3 and b/api/db.sqlite3 differ diff --git a/api/products/admin.py b/api/products/admin.py index d29f231..5e3e538 100644 --- a/api/products/admin.py +++ b/api/products/admin.py @@ -5,7 +5,7 @@ from .models import * admin.site.register(CodeBatch) class SerialCodeAdmin(admin.ModelAdmin): - search_fields = ('code') + search_fields = ['code'] admin.site.register(SerialCode, SerialCodeAdmin) admin.site.register(Product) diff --git a/api/products/migrations/0099_abtest_abtestsample.py b/api/products/migrations/0099_abtest_abtestsample.py new file mode 100644 index 0000000..cdca96a --- /dev/null +++ b/api/products/migrations/0099_abtest_abtestsample.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.25 on 2025-03-02 14:09 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0098_alter_codebatch_mini_prog_entry_path'), + ] + + operations = [ + migrations.CreateModel( + name='ABTest', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=128, verbose_name='名称')), + ('description', models.TextField(verbose_name='描述')), + ('category', models.CharField(max_length=128, verbose_name='实验分类')), + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建日期')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新日期')), + ('enabled', models.BooleanField(default=True, verbose_name='是否启用')), + ('spec', models.TextField(verbose_name='实验配置')), + ], + ), + migrations.CreateModel( + name='ABTestSample', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('data', models.TextField(verbose_name='实验数据')), + ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建日期')), + ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新日期')), + ('abtest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='samples', to='products.abtest')), + ], + ), + ] diff --git a/api/products/migrations/0100_alter_abtest_name.py b/api/products/migrations/0100_alter_abtest_name.py new file mode 100644 index 0000000..ea38032 --- /dev/null +++ b/api/products/migrations/0100_alter_abtest_name.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.25 on 2025-03-02 14:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0099_abtest_abtestsample'), + ] + + operations = [ + migrations.AlterField( + model_name='abtest', + name='name', + field=models.CharField(db_index=True, max_length=128, unique=True, verbose_name='名称'), + ), + ] diff --git a/api/products/migrations/0101_auto_20250302_1419.py b/api/products/migrations/0101_auto_20250302_1419.py new file mode 100644 index 0000000..1e5d011 --- /dev/null +++ b/api/products/migrations/0101_auto_20250302_1419.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.25 on 2025-03-02 14:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0100_alter_abtest_name'), + ] + + operations = [ + migrations.RemoveField( + model_name='abtest', + name='category', + ), + migrations.AddField( + model_name='abtest', + name='test_object', + field=models.CharField(default='', max_length=128, verbose_name='实验对象'), + preserve_default=False, + ), + ] diff --git a/api/products/views.py b/api/products/views.py index 2408144..2dc5e54 100644 --- a/api/products/views.py +++ b/api/products/views.py @@ -470,7 +470,7 @@ class CameraRuleResource(BaseResource): class ABTestResource(BaseResource): class Meta: queryset = ABTest.objects.all().order_by('-pk') - resource_name = 'ab-test' + resource_name = 'abtest' authorization = BaseAuthorization() serializer = BaseSerializer() @@ -479,7 +479,7 @@ class ABTestResource(BaseResource): class ABTestSampleResource(BaseResource): class Meta: queryset = ABTestSample.objects.all().order_by('-pk') - resource_name = 'ab-test-sample' + resource_name = 'abtestsample' authorization = BaseAuthorization() serializer = BaseSerializer()