如何在序列化器中设置默认值?

时间:2015-12-11 03:19:52

标签: django django-rest-framework

我有这些序列化器:

>---id = serializers.IntegerField()
>---name = serializers.CharField()
>---age = serializers.IntegerField()  

现在,我给序列化器这个数据:

{'id': 1, 'name': 'cc'}

我没有为age提供值。 如何在序列化程序中将默认值设置为age

我希望得到这个,12是默认值:

{'id': 1, 'name': 'cc', 'age': 12}

4 个答案:

答案 0 :(得分:9)

你想设置序列化器吗?

class PersonSerializer(serializers.ModelSerializer):
   age = serializers.SerializerMethodField()

   def get_age(self, obj):
       return getattr(obj, 'age', 12)

   class Meta:
       model = Person
       field = ('id', 'name', 'age')

答案 1 :(得分:8)

答案 2 :(得分:5)

正如你所说,你没有模特

1.serializer.py

class UserSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField()
    age = serializers.IntegerField(default=12) #if key age is missing, value of age become 12

    def validate(self,data):
        #other wise you can set default value of age here,
        if data.get('age',None)==None: #this conditon will be true only when age = serializer.IntergerField(required=False)
            data['age']=12
        return data

views.py

serializer = UserSerializer(data={'id': 1, 'name': 'cc', 'age': 14})
serializer.is_valid()
# True
serializer.validated_data
# {'id': 1, 'name': 'cc', 'age': 14} 

或者如果您错过了在views.py中指定年龄

serializer = UserSerializer(data={'id': 1, 'name': 'cc'})
serializer.is_valid()
# True
serializer.validated_data
# {'id': 1, 'name': 'cc', 'age': 12} 

希望这有助于某人:)

答案 3 :(得分:0)

如果您将模型字段设为空白,则可以设置一个默认值,如果您未在POST上提供值,则会填写该值:

class Foo(models.Model):
    bar = models.IntegerField(blank=True, default=42)
                             #^^^^^^^^^^  ^^^^^^^^^^

然后,当您POST使用{}作为数据时