Django Rest Framework 中“不是有效选择”的转义问题

Uri*_*lit 7 django json django-rest-framework

我有一个带有状态字段的模型,如下所示:

PENDING = 'pending'
DONE = 'done'
CANCELED = 'canceled'

class Event:
    EVENT_STATUSES = [(1, PENDING), (2, DONE), (3, CANCELED)]
    status = models.CharField(max_length=20, choices=EVENT_STATUSES, default=PENDING)
Run Code Online (Sandbox Code Playgroud)

我有一个序列化器:

class EventUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Event
        fields = ('status')
Run Code Online (Sandbox Code Playgroud)

当使用以下 JSON 调用它时:

{
    "status": "done"
}
Run Code Online (Sandbox Code Playgroud)

我得到回应:

{
  "status": [
    "\"done\" is not a valid choice."
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为问题在于逃避完成,但为什么呢?我该如何预防呢?

(我有一个内容类型 application/json 标头)。

小智 4

在这里,您将它们设置为 1,2,3,它将把 1,2,3 存储在数据库中。这就是你收到错误的原因。

您可以尝试使用 1,2,3 (这意味着您必须发送 1,2 或 3 才能使其成为有效选择)或将它们作为正确值存储在数据库/模型中