From a3416cfc0d97eb302c939516db1f5e1ab449b211 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 17 Oct 2025 14:51:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9mroombooking=E8=A1=A8?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0022_alter_mroomslot_unique_together.py | 17 +++++++++++++++++ apps/ofm/models.py | 3 --- apps/ofm/serializers.py | 16 ++++++++-------- 3 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 apps/ofm/migrations/0022_alter_mroomslot_unique_together.py diff --git a/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py b/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py new file mode 100644 index 00000000..6bdc67b4 --- /dev/null +++ b/apps/ofm/migrations/0022_alter_mroomslot_unique_together.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.12 on 2025-10-17 06:50 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ofm', '0021_alter_publicity_publicity_opinion'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='mroomslot', + unique_together=set(), + ), + ] diff --git a/apps/ofm/models.py b/apps/ofm/models.py index 6fc1d986..b5fdd1b0 100644 --- a/apps/ofm/models.py +++ b/apps/ofm/models.py @@ -44,9 +44,6 @@ class MroomSlot(BaseModel): mdate = models.DateField('会议日期', db_index=True) slot = models.PositiveIntegerField('时段', help_text='0-47') is_inuse = models.BooleanField('是否占用', default=True) - - class Meta: - unique_together = ('mroom', 'mdate', 'slot', 'is_inuse') # class Seal(BaseModel): diff --git a/apps/ofm/serializers.py b/apps/ofm/serializers.py index c9aeee51..9b11a9f1 100644 --- a/apps/ofm/serializers.py +++ b/apps/ofm/serializers.py @@ -37,10 +37,10 @@ class MroomBookingSerializer(CustomModelSerializer): for slot in slots: if slot < 0 or slot > 47: raise ParseError("时段索引超出范围") - try: - MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) - except Exception as e: - raise ParseError(f"时段已预订,请刷新重选-{e}") + ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() + if ms_exists: + raise ParseError("时段已预订,请刷新重选") + MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) return booking def update(self, instance, validated_data): @@ -52,10 +52,10 @@ class MroomBookingSerializer(CustomModelSerializer): for slot in slots: if slot < 0 or slot > 47: raise ParseError("时段索引超出范围") - try: - MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) - except Exception as e: - raise ParseError(f"时段已预订,请刷新重选-{e}") + ms_exists = MroomSlot.objects.filter(mroom=mroom, mdate=mdate, slot=slot, is_inuse=True).exists() + if ms_exists: + raise ParseError("时段已预订,请刷新重选") + MroomSlot.objects.create(booking=booking, slot=slot, mdate=mdate, mroom=mroom, is_inuse=True) return booking