为什么 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)
我有一个简单的序列化程序
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)