Django Rest Framework get_field没有被调用

我已经有一个使用Django Rest Framework公开数据的Django代码库。我有一个字段在序列化器中定义为SerializerMethodField()

categories = serializers.SerializerMethodField()

在同一序列化程序中,定义了此get_method:

def get_categories(self,obj):
    return [obj.categories.choices[key.upper()] for key in obj.categories]

这行得通,但是我不得不添加一种方法,也可以让用户将新数据发布到api。在模型中,该字段定义为MultiSelectField:

categories = MultiSelectField( choices=CATEGORY_CHOICES,max_length=64,max_choices=6,null=True,blank=True)

由于根据定义,SerializerMethodField是只读的,因此我将该字段更改为CharField(因为它是数据库中的varchar):

categories = serializers.CharField(required=True,allow_blank=False,max_length=100)

这适用于发布新内容,但不幸的是,get_categories()不再被调用。

有人知道如何在保持get_categories()的情况下调用CharField方法吗?

qqcoboo 回答:Django Rest Framework get_field没有被调用

我不确定这是否是影响您的根本问题,但我想您可能正在使用ChoiceField

就像创建类一样:

from rest_framework import serializers


class ChoicesField(serializers.Field):
    def __init__(self,choices,**kwargs):
        self._choices = choices
        super(ChoicesField,self).__init__(**kwargs)

    def to_representation(self,obj):
        return self._choices[obj]

    def to_internal_value(self,data):
        return getattr(self._choices,data)

然后像这样使用它:

class MyModel(models.Model):
    CATEGORY_CHOICES = Choices(
        ('A','CategoryA','CategoryA'),('B','CategoryB','CategoryB')
    )

category = models.CharField(max_length=1,choices=CATEGORY_CHOICES)
本文链接:https://www.f2er.com/3084675.html

大家都在问