如何在 Django REST 框架中为 enum 字段创建序列化程序



我正在用python django rest框架编写一个API,我被困在为ENUM创建一个序列化程序字段上,我如何为ENUM字段创建一个序列化程序字段。我的模型代码是:

class Queue(models.Model):
    class Meta:
        db_table = 'queues'
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    name = models.CharField(max_length=45)
    type = EnumChoiceField(QueueTypes, default=QueueTypes.pending)
    date = models.DateTimeField(auto_now=True)

我正在为这个模型编写一个序列化程序。

class QueueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Queue
        fields = ('__all__')
    id = serializers.CharField(read_only=True)
    name = serializers.CharField(max_length=45, required=True)
    type=?????# what am i supposed to do here?
    date = serializers.DateTimeField(read_only=True)

在谷歌上进行了大量搜索后,我终于找到了 EnumchoiceField 序列化问题的答案,以下更改完成了这项工作。

Model.py

from enumchoicefield import ChoiceEnum, EnumChoiceField
class QueueTypes(ChoiceEnum):
    appointment = "appointment"
    wait = "wait"
    process = "process"
    pending = "pending"
class Queue(models.Model):
    class Meta:
       db_table = 'queues'
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    name = models.CharField(max_length=45)
    type = EnumChoiceField(enum_class=QueueTypes , default=QueueTypes.process)
    date = models.DateTimeField(auto_now=True)
    fk_department = models.ForeignKey(Department, related_name='department',null=True, on_delete=models.CASCADE)

Serialize.py

from enumchoicefield import ChoiceEnum, EnumChoiceField
class QueueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Queue
        fields = ('__all__')
    id = serializers.UUIDField(read_only=True)
    name = serializers.CharField(max_length=45, required=True)
    type = EnumChoiceField(enum_class=QueueTypes)
    date = serializers.DateTimeField(read_only=True)

EnumChoiceField扩展似乎工作正常,但不能正确支持 REST 框架的 HTML 支持呈现,序列化为 EnumChoiceField 的字段不会呈现。

最新更新