Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ModelSerializer需要实例中的字段数据_Django_Django Rest Framework - Fatal编程技术网

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
)
它似乎比修改请求数据更干净