首页 > 解决方案 > 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字段中列出,因为此序列化程序用于返回所有数据作为响应。

谢谢

标签: djangodjango-rest-framework

解决方案


在模型序列化程序中将所需标志设置为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 = '-')

推荐阅读