【问题标题】:Why does random in django rest serializer always return the same field?为什么 django rest 序列化程序中的 random 总是返回相同的字段?
【发布时间】:2020-10-14 16:50:58
【问题描述】:

我有一个简单的序列化器

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

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

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

为什么会这样?如何摆脱这种情况?

【问题讨论】:

    标签: python django django-models django-rest-framework django-serializer


    【解决方案1】:

    你应该像这样定义你的default

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

    【讨论】:

      【解决方案2】:

      因为您的序列化程序类中的默认 id 定义了一次,它等于 150。 就像写作一样

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

      如果你希望 id 是随机的,你应该在创建一个 istance 时使用random.randrange(100, 200)

      【讨论】:

      • 我不想在创建实例时明确指定随机
      • 在这种情况下,GProst 的解决方案应该可以解决问题
      • 序列化器有很奇怪的逻辑。谢谢:)
      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 2021-08-31
      • 2021-09-27
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多