Skip to main content
 首页 » 编程设计

python之在 Django 模型中不存在的 django-rest-framework 序列化器上定义任意字段

2025年04月02日42bhlsheji

我想在 Django 模型。

我的代码是这样的:

class Person(models.Model): 
    pass 
 
class PersonSerializer(serializers.ModelSerializer): 
 
    foo = serializers.CharField() 
 
    class Meta: 
        model = Person 
        fields = ('id', 'foo') 
 
class PersonViewSet(viewsets.ModelViewSet): 
 
    queryset = Person.objects.all() 
    serializer_class = PersonSerializer 

此代码失败:

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

但是...如果我将 Person 类调整为:

class Person(models.Model): 
 
    def foo(self): 
        pass 

然后我没有得到错误,我可以发布数据。

我不喜欢在 Person 类上创建虚拟方法来解决此错误的想法。是否有 django-rest-framework 方法来缓解我错过的这个错误?

请您参考如下方法:

你可以这样做,使用 SerializerMethodField :

class PersonSerializer(serializers.ModelSerializer): 
 
    foo = serializers.SerializerMethodField() 
 
    ... 
 
    def get_foo(self, obj): 
        return 'the foo' 

那么关于如何序列化附加字段的逻辑就存在于序列化程序本身,但是如果需要,它确实可以通过 obj 访问实例。