尝试在DRF上用DjangoChoices序列化SelectMultipleField

2024-06-26 17:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Django Rest框架开发一个API Rest,供AngularJS应用程序使用。我有一些带有^{}属性的模型,但是当我试图用API通过JSON更新这些字段时遇到了一个问题。你知道吗

当我从服务器获取数据时,我接收到一个字符串数组,但是当我用相同的格式将更新后的数据发送回服务器时,我得到一个错误:"This isn't a valid option"。我也尝试过将数据解析成用逗号分隔的字符串,但也不起作用。。。。你知道我做错了什么吗?你知道吗

型号:

class Hueco(models.Model):

    class ProteccionType(DjangoChoices):
        Ninguno = ChoiceItem(label=u'Ninguno', value='ninguno')
        Retranqueo = ChoiceItem(label=u'Retranqueo', value='retranqueo')
        Voladizo = ChoiceItem(label=u'Voladizo', value='voladizo')
        Lateral_izquierdo = ChoiceItem(label=u'Lateral Izquierdo', value='lateral_izquierdo')
        Lateral_derecho = ChoiceItem(label=u'Lateral Derecho', value='lateral_derecho')
        Toldo = ChoiceItem(label=u'Toldo', value='toldo')
        Lamas_verticales = ChoiceItem(label=u'Lamas Verticales', value='lamas_verticales')
        Lamas_horizontales = ChoiceItem(label=u'Lamas Horizontales', value='lamas_horizontales')
        Laminas = ChoiceItem(label=u'Láminas', value='laminas')
        Cortinas = ChoiceItem(label=u'Cortinas', value='cortinas')

    tipo_proteccion = SelectMultipleField(
        max_length=150,
        choices=ProteccionType.choices,
        default=ProteccionType.Ninguno
    )

序列化程序:

class HuecoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Hueco
        fields = ('id', 'tipo_proteccion' )

因此,我从服务器获得的JSON示例可以是:

[
    "id": 1,
    "tipo_proteccion": [
      "ninguno"
    ]
]

如果我尝试用这个更新数据,我会得到一个错误:

[
    "id": 1,
    "tipo_proteccion": [
      "cortinas",
      "voladizo"
    ]
]

但如果我这样寄的话,就没问题了。你知道吗

[
    "id": 1,
    "tipo_proteccion": "cortinas"
]

所以我的问题是如何发送多个选择。我想是因为我需要改变序列化的方式,但不确定。。。你知道吗


Tags: 数据restapiidvaluelabelclasslateral