现在我有一个输入和两个复选框,它们将一个变量返回到python后端。 我想让两个复选框的默认值为false,如果选中它们则返回true。 我认为我的问题是因为我使用的是串行器,如果取消选中,我不会从这两个复选框中获取值。 如果选中该复选框,我的代码将起作用,并且值将保存在模型中。如果不是我收到错误
HTML
<input type="text" ng-model="var.name">
<input ng-model="var.pem" type="checkbox">
<input ng-model="var.key" type="checkbox">
串行
class CreateSerializer(serializers.ModelSerializer):
class Meta:
model = Thing
fields = (
'name',
'pem',
'key',
)
模型
class Thing(models.Model):
name = models.CharField(max_length=50)
pem = models.BooleanField(default=False)
key = models.BooleanField(default=False)
如果复选框保持未选中状态,是否可以为Serializer设置现有值?
答案 0 :(得分:0)
当您未在复选框中传递任何内容时,validated_data
字典中没有值,该字典基本上将pem
和key
键分配为None
字典。
您在模型中描述的字段不支持null
值,因为它是BooleanField
。
<强>解决方案强>:
name = thing_ser.validated_data.get('name')
# add default values if the key is not present.
pem = thing_ser.validated_data.get('pem', False)
keystore = thing_ser.validated_data.get('keystore', False)
# if it was present and it was None.
if pem is None:
pem = False
if keystore is None:
keystore = False
# save into model
thing1=Thing(name=name, pem=pem, keystore=keystore)
thing1.save()
此解决方案更改了两项内容,当False
中没有validated_data
和pem
个密钥时,它会将默认值添加为keystore
。此外,主要部分是检查它们是否为None
,如果是,请将其设为False
。