You need to enable JavaScript to run this app. DRF ModelSerializer创建Booking时关联Room模型字段未更新问题
优惠活动
大模型
产品
解决方案
定价
更多

DRF ModelSerializer创建Booking时关联Room模型字段未更新问题

问题描述

我为Booking模型编写了ModelSerializer,需要在其create方法中更新关联Room模型的对应字段,但实际运行时Booking对象成功创建,Room模型实例却未被更新,相关代码如下:

class BookingCreateUpdateSerializer(serializers.ModelSerializer):
    room = serializers.PrimaryKeyRelatedField(queryset=Room.objects.all())
    booking_status = serializers.ChoiceField(choices=BookingStatus.choices())

    class Meta:
        model = Booking
        fields = [
            # 省略其余字段定义
        ]

    def to_representation(self, instance):
        return BookingDetailSerializer(instance=instance,context=self.context).to_representation(instance)

    @transaction.atomic
    def create(self, validated_data):
        room = validated_data['room']
        booking_status = validated_data.pop('booking_status')
        room.booking_status = booking_status
        room.save()
        validated_data['room'] = room
        return super().create(validated_data)

预期结果

Room.booking_status 会被成功设置

实际结果

Room.booking_status 字段未发生变更

问题解决

该问题出现在单元测试环节:在TestCase中测试时提前初始化了self.room = Room(...)实例,该内存实例不会自动同步数据库的最新修改,仅需要在执行断言前调用self.room.refresh_from_db()从数据库拉取最新值即可。


内容的提问来源于stack exchange,提问作者Shahzaib Akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 14:45:03