Django ModelSerializer需要实例中的字段数据
我有以下序列化程序:Django ModelSerializer需要实例中的字段数据,django,django-rest-framework,Django,Django Rest Framework,我有以下序列化程序: class TrackGroupSerializer(serializers.ModelSerializer): class Meta: model = TrackGroup fields = ('id', 'name', 'report', 'tracks') # `report` is FK 我从url获取报告id,因此我认为这将起作用: ... track_group = TrackGroup(report=report)
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():
...
这不起作用,因为序列化程序对字段<代码>报告有错误,因为该字段丢失并且是必需的。当使用此序列化程序返回响应中的所有数据时,提供诸如报告
之类的数据并将其仍列在TrackGroupSerializer
字段中的正确方法是什么
谢谢在model serializer中将所需的标志设置为False
class TrackGroupSerializer(serializers.ModelSerializer):
report = serializers.CharField(required=False)
class Meta:
model = TrackGroup
fields = ('report', ...)
如果要创建序列化程序并保存模型实例而不向变量提供值,则始终可以在模型中为其设置默认值
在models.py中
class TrackGroup(models.Model):
report = models.CharField(default = '-')
在模型序列化程序中将所需标志设置为False
class TrackGroupSerializer(serializers.ModelSerializer):
report = serializers.CharField(required=False)
class Meta:
model = TrackGroup
fields = ('report', ...)
如果要创建序列化程序并保存模型实例而不向变量提供值,则始终可以在模型中为其设置默认值
在models.py中
class TrackGroup(models.Model):
report = models.CharField(default = '-')
您可以将数据设置为dict,所有键都不作为请求
data = {'report': report.id, **request.data}
serializer = TrackGroupSerializer(
instance=track_group,
context=dict(request=request),
data=data
)
您可以将数据设置为dict,所有键都不作为请求
data = {'report': report.id, **request.data}
serializer = TrackGroupSerializer(
instance=track_group,
context=dict(request=request),
data=data
)
正确的解决方案似乎是
partial=True
:
serializer = TrackGroupSerializer(
instance=track_group,
context=dict(request=request),
data=request.data,
partial=True
)
它似乎比修改请求数据更干净。正确的解决方案似乎是
partial=True
:
serializer = TrackGroupSerializer(
instance=track_group,
context=dict(request=request),
data=request.data,
partial=True
)
它似乎比修改请求数据更干净