在DRF 3中的ModelSerializer上添加非模型字段

发布于 2021-01-29 15:17:58

如何在DRF 3中的ModelSerializer上添加非模型字段?即添加一个在我的实际模型中不存在的字段?

class TestSerializer(serializers.ModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='vote_detail')
    non_field = serializers.CharField()  # no corresponding model property.


    class Meta:
        model = vote_model
        fields = ("url", "non_field")

    def create(self, validated_data):
      print(direction=validated_data['non_field'])

但是DRF 3给了我错误:

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

我搜索了具有非模型write_only字段的堆栈DRF-
ModelSerializer
,找到了一些解决方案,但这些解决方案是指我正在使用DRF
3的DRF2。在此版本上是否有解决方案?

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    class TestSerializer(serializers.ModelSerializer):
        url = serializers.HyperlinkedIdentityField(view_name='vote_detail')
        non_field = serializers.SerializerMethodField()  # no corresponding model property.
    
        class Meta:
            model = vote_model
            fields = ("url", "non_field")
    
        def create(self, validated_data):
            print(direction=validated_data['non_field'])
    

    http://www.django-rest-framework.org/api-
    guide/fields/#serializermethodfield

    或通过此链接



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看