diff --git a/server/migrations/0005_filterconfig_min_max_amount.py b/server/migrations/0005_filterconfig_min_max_amount.py new file mode 100644 index 0000000..f6f0843 --- /dev/null +++ b/server/migrations/0005_filterconfig_min_max_amount.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +筛选配置表增加最小金额、最大金额字段,与前端请求/响应字段名统一 +""" +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('server', '0004_add_followup_config'), + ] + + operations = [ + migrations.AddField( + model_name='filterconfig', + name='min_amount', + field=models.IntegerField(blank=True, null=True, verbose_name='最小金额'), + ), + migrations.AddField( + model_name='filterconfig', + name='max_amount', + field=models.IntegerField(blank=True, null=True, verbose_name='最大金额'), + ), + ] diff --git a/server/models.py b/server/models.py index dc56ebe..2cdf539 100644 --- a/server/models.py +++ b/server/models.py @@ -120,6 +120,8 @@ class FilterConfig(models.Model): collection_min = models.IntegerField(default=10, verbose_name="收藏最少个数/天") collection_max = models.IntegerField(default=50, verbose_name="收藏最多个数/天") message_interval = models.IntegerField(default=30, verbose_name="打招呼间隔秒") + min_amount = models.IntegerField(null=True, blank=True, verbose_name="最小金额") + max_amount = models.IntegerField(null=True, blank=True, verbose_name="最大金额") is_active = models.BooleanField(default=True, verbose_name="是否启用") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") diff --git a/server/serializers.py b/server/serializers.py index 9c95738..fa9c400 100644 --- a/server/serializers.py +++ b/server/serializers.py @@ -91,12 +91,30 @@ class LoginSerializer(serializers.Serializer): # ────────────────────────── 筛选配置 ────────────────────────── +# 请求中可能出现的“金额”字段别名,统一映射为 min_amount / max_amount,保证请求与响应字段名一致 +FILTER_AMOUNT_ALIASES = { + "minAmount": "min_amount", + "maxAmount": "max_amount", + "最小金额": "min_amount", + "最大金额": "max_amount", +} + + class FilterConfigSerializer(serializers.ModelSerializer): class Meta: model = FilterConfig fields = "__all__" read_only_fields = ["id", "created_at", "updated_at"] + def to_internal_value(self, data): + """请求中兼容 minAmount/maxAmount、最小金额/最大金额 等别名,统一为 min_amount/max_amount。""" + if isinstance(data, dict): + data = dict(data) + for alias, canonical in FILTER_AMOUNT_ALIASES.items(): + if alias in data and canonical not in data: + data[canonical] = data.pop(alias) + return super().to_internal_value(data) + # ────────────────────────── 话术 ──────────────────────────