如何将序列化程序中的默认字段设置为与同一序列化程序中另一个字段相同



我有一个类似的序列化程序

class SomeSerializer(serializers.Serializer):
id = serializers.UUIDField(required=False, default=uuid.uuid4)
anotherId = serializers.UUIDField(required=False, default = ????)

并且我想将字段"anotherId"设置为默认情况下的"id"。

这就是我所期望的

s = SomeSerializer(data={}).
data = s.data
data.id # return '56e34c58-be7d-4c7c-992a-43080faf5614'
data.anotherId #  return '56e34c58-be7d-4c7c-992a-43080faf5614' (as id)

我试着像这里一样做,但不起作用

class SomeSerializer(serializers.Serializer):
id = serializers.UUIDField(required=False, default=uuid.uuid4)
anotherId = serializers.UUIDField(required=False, default = id.get_default())

如何做到这一点?

您可以使用to_representation方法:

class SomeSerializer(serializers.Model):
id = serializers.UUIDField(required=False, default=uuid.uuid4)
another_id = serializers.UUIDField(required=False)
def to_representation(self, instance):
data = super().to_representation(instance)
if not data.get('another_id', None):
data['another_id'] = data['id']
return data

如果要将这些ID保存在模型上,则可以使用ModelSerializerpre_save信号来实现:

# serializers.py
class SomeSerializer(serializers.Model):
id = serializers.UUIDField(required=False, default=uuid.uuid4)
another_id = serializers.UUIDField(required=False)
class Meta
model = MyModel
# models.py
from django.db.models.signals import pre_save
...
@receiver(pre_save, sender=MyModel)
def set_default_another_id(sender, instance, **kwargs):
if not instance.another_id:
instance.another_id = instance.id

相关内容

最新更新