繁体   English   中英

如何在 Django Rest 框架中序列化 ChoiceFields?

[英]How to serialize ChoiceFields in Django Rest Framework?

第一次 Python 用户在这里,来自 Javascript 世界。 我能够从 Django ZDB974238714CA4A4 中写入的 Django 检索序列化为 JSON 的 Model 并将其显示在前端 08A1 中。 但是现在我刚刚向具有多种选择的 Model 添加了一个字段priority ,我很难将这些选择带到前端(我想在下拉列表中显示它们并更新 REST API)。 迁移成功,我可以从后端选择 select 但在前端我只是从迁移中获取默认值。 这是我现在的代码:

模型.py

class Todo(models.Model):
  title = models.CharField(max_length=120)
  description = models.TextField()
  completed = models.BooleanField(default=False)
  priority_choices = [
    ('High', 'High'),
    ('Medium', 'Medium'),
    ('Low', 'Low'),
  ]
  priority= models.CharField(max_length=6, choices=priority_choices, default='Low') #new field

  def __str__(self):
    return self.title

序列化程序.py

from rest_framework import serializers
from .models import Todo

      
class TodoSerializer(serializers.ModelSerializer):
  class Meta:
    model = Todo
    fields = ('id', 'title', 'description', 'completed', 'priority')

视图.py

class TodoView(viewsets.ModelViewSet):     
  serializer_class = TodoSerializer          
  queryset = Todo.objects.all()   

我只想要最简单的解决方案,最好只在 serializers.py 中更新TodoSerializer(serializers.ModelSerializer) class,这样它就都来自这个 Model。 那可能吗? Reading https://www.django-rest-framework.org/api-guide/fields/#choicefield is not clear for me whether I need to create a new class for the same Model just to retrieve ChoiceFields or if it's possible to do it all from one Class 但无论我尝试什么,都会出现语法错误。 就像我说的,我对 Python 很陌生。 谢谢。

您可以使用SerializerMethodField完成此操作

class TodoSerializer(serializers.ModelSerializer):
    priority_choices = serializers.SerializerMethodField()

    def get_priority_choices(self, obj):
        return [choice[0] for choice in Todo.priority_choices]

    class Meta:
        model = Todo
        fields = ('id', 'title', 'description', 'completed', 'priority', 'priority_choices')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM