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
相关产品推荐
相关产品推荐

