nat*_*ila 9 django django-rest-framework
我有这些序列化器:
>---id = serializers.IntegerField()
>---name = serializers.CharField()
>---age = serializers.IntegerField()
Run Code Online (Sandbox Code Playgroud)
现在,我给序列化器这个数据:
{'id': 1, 'name': 'cc'}
Run Code Online (Sandbox Code Playgroud)
我没有给出价值age.如何age在序列化器中设置默认值?
我想得到这个,这12是一个默认值:
{'id': 1, 'name': 'cc', 'age': 12}
Run Code Online (Sandbox Code Playgroud)
小智 10
你想在序列化器中设置吗?
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')
Run Code Online (Sandbox Code Playgroud)
age = serializers.IntegerField(default=12, initial=12)
Run Code Online (Sandbox Code Playgroud)
初始化为预填充html表单.查看文档
如您所说,您没有模特
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
Run Code Online (Sandbox Code Playgroud)
views.py
serializer = UserSerializer(data={'id': 1, 'name': 'cc', 'age': 14})
serializer.is_valid()
# True
serializer.validated_data
# {'id': 1, 'name': 'cc', 'age': 14}
Run Code Online (Sandbox Code Playgroud)
或者,如果您错过了在views.py中指定年龄的信息
serializer = UserSerializer(data={'id': 1, 'name': 'cc'})
serializer.is_valid()
# True
serializer.validated_data
# {'id': 1, 'name': 'cc', 'age': 12}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助某人:)
如果您将模型字段设为空白,您可以设置一个默认值,如果您未在 上提供值,则将填充该默认值POST:
class Foo(models.Model):
bar = models.IntegerField(blank=True, default=42)
#^^^^^^^^^^ ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
然后,当您POST使用{}的数据
| 归档时间: |
|
| 查看次数: |
14059 次 |
| 最近记录: |