Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Python django终结点未返回序列化程序中指定的所有字段_Python_Django_Django Rest Framework - Fatal编程技术网

Python django终结点未返回序列化程序中指定的所有字段

Python django终结点未返回序列化程序中指定的所有字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,这是源定义: class SourceDefinition(models.Model): source = models.ForeignKey(Source, on_delete=models.DO_NOTHING) special_id = models.IntegerField(default=0) ad_group = models.CharField(max_length=50) creator = models.CharField(max_length=

这是源定义:

class SourceDefinition(models.Model):
    source = models.ForeignKey(Source, on_delete=models.DO_NOTHING)
    special_id = models.IntegerField(default=0)
    ad_group = models.CharField(max_length=50)
    creator = models.CharField(max_length=100)
    config = JSONField(default=dict, blank=True)

class SourceDefinitionSerializer(serializers.ModelSerializer):
    source = SourceSerializer(read_only=True, many=False)
    source_id = serializers.PrimaryKeyRelatedField(source="source", queryset=Source.objects.all(),
                                                   write_only=True)

    class Meta:
        model = SourceDefinition
        fields = ['id', 'source', 'source_id', 'special_id', 'ad_group', 'creator', 'config']
发动机:

class EngineDefinition(models.Model):
    engine = models.ForeignKey(Engine, on_delete=models.DO_NOTHING)
    source_def = models.ForeignKey(SourceDefinition, on_delete=models.DO_NOTHING)
    schedule_def = models.ForeignKey(ScheduleDefinition, on_delete=models.DO_NOTHING, null=True, blank=True)
    ad_group = models.CharField(max_length=50)
    creator = models.CharField(max_length=100)
    where_clause = models.CharField(max_length=1000, null=True, blank=True)
    config = JSONField(default=dict, blank=True)

class EngineDefinitionSerializer(serializers.ModelSerializer):
    engine = EngineSerializer(read_only=True, many=False)
    source_def = ScheduleDefinitionSerializer(read_only=True, many=False)
    schedule_def = SourceDefinitionSerializer(read_only=True, many=False)
    engine_id = serializers.PrimaryKeyRelatedField(source="engine", queryset=Engine.objects.all(),
                                                   write_only=True)
    source_def_id = serializers.PrimaryKeyRelatedField(source="source_def", queryset=SourceDefinition.objects.all(),
                                                       write_only=True)
    schedule_def_id = serializers.PrimaryKeyRelatedField(source="schedule_def", queryset=ScheduleDefinition.objects.all(),
                                                         write_only=True)

    class Meta:
        model = EngineDefinition
        fields = ['id', 'engine', 'source_def', 'schedule_def', 'engine_id', 'source_def_id', 'schedule_def_id',
                  'ad_group', 'creator', 'where_clause', 'config']
使用EngineDefinitionSerializer从端点返回的值

{
    "id": 1,
    "engine": {
        "id": 1,
        "name": "en"
    },
    "source_def": {
        "id": 1,
        "ad_group": "YYY",
        "creator": "EEE",
        "config": {}
    },
    "schedule_def": null,
    "ad_group": "YYY",
    "creator": "EEE",
    "where_clause": null,
    "config": {}
}
为什么
EngineDefinitionSerializer
端点响应中没有返回
special\u id
?我还尝试指定所有字段名,而不是使用
\uuuuuuuuuuuuuuuuuuu
,结果相同


(需要更多单词worcs words wrods)

如果序列化程序中有自定义字段,如案例中的源和源id,则必须在字段列表中明确指定它。逐个指定所有文件,以及源和源id

例如,在您的案例中:

class SourceDefinitionSerializer(serializers.ModelSerializer):
    source = SourceSerializer(read_only=True, many=False)
    source_id = serializers.PrimaryKeyRelatedField(source="source", queryset=Source.objects.all(), write_only=True)

    class Meta:
        model = SourceDefinition
        fields = '[source, source_id, filed1, field2, .......]'

遗憾的是,从2020年7月开始,没有其他方法可以在自定义字段中使用
\uuuu all\uuuuu
,解析
Meta
类的
fileds
子句的源代码,您可以查看它是如何工作的,不是太复杂的代码

我尝试显式声明所有字段,但出现了相同的结果(请参见编辑到主帖子)如果我直接使用
SourceDefinitionSerializer
访问某个视图,则会出现
特殊\u id
,但在上述外部视图中,它不会出现。等等,为什么在
EngineDefinitionSerializer
中,源定义为ScheduleDefinitionSerializer,而日程定义为SourceDefinitionSerializer?不应该吗相反吗?@YuriNudelman谢谢……这就是问题所在!