Django的双下划线表示法在这里不生效

1 投票
1 回答
665 浏览
提问于 2025-04-18 13:09

我把这两个回答结合在一起了:一个两个。我尝试从嵌套对象中只选择某些字段,但完全没有成功,结果却返回了所有表的所有字段。

序列化器:

class NameTestTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = TestTypeModel
        fields = 'name'

class ExecutedTestSerializer(serializers.ModelSerializer):
    test_type = NameTestTypeSerializer
    class Meta:
        model = ExecutedTestModel
        fields = ('id',  'result', 'test_type')
        depth = 1

模型:

class TestTypeModel(models.Model):

    id = models.AutoField(primary_key=True)
    name = models.CharField(null=False, max_length=255, unique=True)
    ........
    class Meta:
        db_table = 'TestType'

class ExecutedTestModel(models.Model):

    id = models.AutoField(primary_key=True)
    test_type = models.ForeignKey(TestTypeModel, to_field='id')
    result = models.IntegerField(null=False)
    class Meta:
        db_table = 'ExecutedTest'

视图集:

class ExecutedTestViewSet(viewsets.ModelViewSet):
    permission_classes = (IsAuthenticatedOrReadOnly,)
    serializer_class = ExecutedTestSerializer
    def get_queryset(self):
        queryset = ExecutedTestModel.objects.all().select_related('test_type').defer('test_type__executable' )
        return queryset

1 个回答

1

你是怎么检查可执行文件是否被获取的?在Django中,你可以访问延迟加载的字段,这些字段是根据需要从数据库中加载的。

我觉得问题不在于下划线的写法,而是在于序列化器的定义。

撰写回答