django - Django REST Framework - SerializerMethodField 在 serializer.save() 上为空
问题描述
我正在使用 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
.
推荐阅读
- visual-studio - Visual Studio 在空行上添加了空格
- vtk - vtk:为什么来自 vtkPropPicker 和 vtkCoordinate 的世界点不同
- cookiecutter-django - 使用 django cookie 切割器,我可以使用备份命令仅备份和恢复特定表吗?
- javascript - Javascript:使用 catch 块但不处理错误
- javascript - 如何将相同的功能应用于多个div
- php - 如何使用提取的 X.509 数据验证 PDF 并获取信息?
- matlab - 日期时间小时和分钟的平均值/平均值 ITSELF - 不对应的嵌入数据
- python - Pyspark 相当于 pandas 的所有功能
- java - Spring Boot - Raspberry PI - RestTemplate 连接超时
- python - 使用 python DataFrame 附加谷歌表格