nar*_*upo 5 django python-3.x django-rest-framework
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
保存过程:
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
Run Code Online (Sandbox Code Playgroud)
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'
)
Run Code Online (Sandbox Code Playgroud)
然后,传入animal_id请求数据以将其Animal与Human.
参考:
* PrimaryKeyRelatedField 文档