我有这些序列化器:
>---id = serializers.IntegerField()
>---name = serializers.CharField()
>---age = serializers.IntegerField()
现在,我给序列化器这个数据:
{'id': 1, 'name': 'cc'}
我没有为age
提供值。
如何在序列化程序中将默认值设置为age
?
我希望得到这个,12
是默认值:
{'id': 1, 'name': 'cc', 'age': 12}
答案 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)
{{1}}
首先预填充html表单。 请参阅Execution Failed for task :app:compileDebugJavaWithJavac in Android Studio
答案 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
使用{}
作为数据时