我正在使用 Django 和 REST 框架。我想通过数据使用序列化程序进行保存。我调用 serializer.save()
.但是保存的模型字段为空,animal
字段在 HumanSerializer
.我想定义 animal
字段由 SerializerMethodField
并想保存模型。怎么做?
序列化器:
class HumanSerializer(serializers.ModelSerializer):
animal = SerializerMethodField()
class Meta:
model = Human
fields = (
'id',
'animal', # <- animal is ForeignKey of Animal model
)
def get_animal(self, lead):
# blah blah blah
pass
一个保存过程:
data['animal'] = 1
serializer = HumanSerializer(
data=data,
context={'request': request},
)
if serializer.is_valid():
human = serializer.save()
human.animal # <- animal is null. but delete SerializerMethodField then not null
最佳答案
SerializerMethodField
始终是只读字段。您可以为写作目的添加另一个字段。
示例 :
class HumanSerializer(serializers.ModelSerializer):
animal = SerializerMethodField()
animal_id = serializers.PrimaryKeyRelatedField(
source='animal',
queryset=Animal.objects.all(),
write_only=True
)
class Meta:
model = Human
fields = (
'id',
'animal',
'animal_id'
)
然后,通过
animal_id
在请求数据中保存Animal
随着Human
.引用 :
* PrimaryKeyRelatedField docs
关于Django REST Framework - SerializerMethodField 在 serializer.save() 上为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53726541/