django - ModelSerializer 需要来自实例的字段数据
问题描述
我有以下序列化程序:
class TrackGroupSerializer(serializers.ModelSerializer):
class Meta:
model = TrackGroup
fields = ('id', 'name', 'report', 'tracks') # `report` is FK
我从 url 获取报告 ID,所以我认为这会起作用:
...
track_group = TrackGroup(report=report)
serializer = TrackGroupSerializer(
instance=track_group,
context=dict(request=request),
data=request.data
)
if serializer.is_valid():
...
这不起作用,因为序列化程序有字段错误,report
因为该字段丢失并且是必需的。什么是提供数据的正确方法,report
并且仍然在TrackGroupSerializer
字段中列出,因为此序列化程序用于返回所有数据作为响应。
谢谢
解决方案
在模型序列化程序中将所需标志设置为False
class TrackGroupSerializer(serializers.ModelSerializer):
report = serializers.CharField(required=False)
class Meta:
model = TrackGroup
fields = ('report', ...)
如果您想创建序列化程序并保存模型实例而不为变量提供值,您始终可以在模型中为其设置默认值。
在模型.py
class TrackGroup(models.Model):
report = models.CharField(default = '-')
推荐阅读
- java - 使用 maven 同时启动两个 Spring Boot 应用程序
- python - 基于 Startswith 创造字典价值
- python - 当有多个规范时,优化 Pandas 计算的良好做法是什么?
- google-app-engine - 如何获取当前任务状态 - Google Cloud Task + App Engine (NodeJS)
- python - Python:当我无法修改源存储桶时,在不同账户中的两个 s3 存储桶之间进行同步
- javascript - 非递归函数的最大调用堆栈
- json - 将 mongo 聚合结果映射到数组
- java - 如何使用 REST API 将子对象添加到父对象?
- mysql - 在多表连接查询中从表中选择所有列时,获取时间会增加
- jenkins - 无法通过 Jenkins 打开 GUI 应用程序