web-dev-qa-db-ja.com

Django RESTフレームワークで列挙型フィールドのシリアライザーを作成する方法

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)
10
nick

グーグルでたくさんの検索をした後、私はついに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)
6
nick

EnumchoiceField拡張機能は正常に機能しているようですが、REST FrameworkのHTMLサポートレンダリングを正しくサポートしていません。EnumChoiceFieldとしてシリアル化されたフィールドはレンダリングされません。

0
Hardest