AlexandruC
AlexandruC

Reputation: 3637

Django's double-underscore notation not working here

I have combined these two answers: one and two In the attempt to select only certain fields from nested objects without any success at all, the result is returning ALL fields from all tables.

serializers:

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

models:

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'

viewset:

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

Upvotes: 1

Views: 677

Answers (1)

akaariai
akaariai

Reputation: 734

How did you check that executable is fetched? In django you can access deferred fields, they are loaded from db on demand.

I believe the problem isn't in underscore notation, instead it is in the definition of the serializers.

Upvotes: 1

Related Questions