【问题标题】:Django Serializer Field OptionalDjango 序列化器字段可选
【发布时间】:2017-08-16 01:43:29
【问题描述】:

现在我有一个输入和两个复选框,它们会将一个变量返回到 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)

如果复选框保持未选中状态,是否可以为序列化程序提供现有值?

【问题讨论】:

  • 请显示保存数据的视图。
  • 我添加了保存到模型中的部分
  • 你得到什么错误?

标签: python django serialization checkbox


【解决方案1】:

当您在复选框中不传递任何内容时,validated_data 字典中没有任何值,它基本上将pemkey 键分配为字典中的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()

这个解决方案改变了两件事,当validated_data 中没有pemkeystore 键时,它添加了一个默认值False。另外,主要是检查是否为None,如果是,则设为False

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 2013-07-07
    • 2021-01-20
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2014-11-09
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多