django rest-framework将字段添加到ModelSerializer

问题描述 投票:0回答:1

我有以下序列化器:

class AMXModXAdminsSerializer(mixins.GetCSConfigMixin, serializers.ModelSerializer):
    admin = serializers.CharField(label='Admin', max_length=35, required=True, write_only=True)
    password = serializers.CharField(label='Password', max_length=35, required=False, write_only=True)
    access_flags = serializers.MultipleChoiceField(choices=ACCESS_FLAGS_OPTIONS, required=True, write_only=True)
    account_flags = serializers.MultipleChoiceField(choices=ACCOUNT_FLAGS_OPTIONS, required=True, write_only=True)

    class Meta:
        model = CS16Server
        fields = ('name', 'amxadmins', 'admin', 'password', 'access_flags', 'account_flags')
        read_only_fields = ('name', 'amxadmins',)

当我尝试访问该URL时会抱怨:

Got AttributeError when attempting to get a value for field `admin` on serializer `AMXModXAdminsSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `CS16Server` instance.
Original exception text was: 'CS16Server' object has no attribute 'admin'.

如果我在每个字段中添加write_only,错误将消失。

事实是,对于相同的模型,我有一个类似的序列化程序,其字段不属于该模型,并且在不向每个字段添加“ write_only = True”的情况下,它也可以完美地工作。

任何人为什么会工作而另一个人不工作?

django-rest-framework
1个回答
0
投票
[我访问时是什么意思?发布获取补丁?

错误说:

'CS16Server' object has no attribute 'admin'.

是吗?如果不是,您打算在哪里写?如果模型没有admin字段(如error所述),则需要类似以下内容:

class AMXModXAdminsSerializer(mixins.GetCSConfigMixin, serializers.ModelSerializer): admin= serializers.SerializerMethodField() fields ... ... def get_admin(self, obj): do somthing with self (contains the request) or the obj you're working on return theOUTcome

© www.soinside.com 2019 - 2024. All rights reserved.