gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:49 28 4
gpt4 key购买 nike

我想在 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 访问实例。

关于python - 在 Django 模型中不存在的 django-rest-framework 序列化器上定义任意字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38755622/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com