为什么 django 中的随机 rest 序列化程序总是 return 相同的字段?

Why does random in django rest serializer always return the same field?

我有一个简单的序列化程序

class Serializer(serializers.Serializer):
    name = serializers.CharField(required=False, default='someName')
    id = serializers.IntegerField(required=False, default=random.randrange(100, 200))

当我创建序列化程序的多个实例时,它总是returns相同的字段

a = Serializer(data={})
a.is_valid(data={})
data = a.data
data['id'] // return  for example 150
 
b = Serializer(data={})
b.is_valid(data={})
b_data = b.data
b_data['id'] // return also 150

为什么会这样?如何摆脱这个?

因为你的序列化器中的默认 id class 定义了一次,它等于 150。 就像写作

id = serializers.IntegerField(required=False, default=150)

如果您希望 id 是随机的,您应该在创建距离时使用 random.randrange(100, 200)

您应该这样定义 default

default=lambda: random.randrange(100, 200)