eamigo86 / graphene-django-extras

Extras functionalities for Graphene-Django
MIT License
416 stars 106 forks source link

Traditional Methods for displaying calculated field not working. #15

Closed evanheckert closed 6 years ago

evanheckert commented 6 years ago

Very possible that I'm missing something, but my model contains this property:

    @property
    def name_string(self):
        return '%s %s %s' % (
            self.model_year,
            self.model_name,
            self.trim
        )

Serializer:

class VehicleSerializer(serializers.ModelSerializer):
    name_string = serializers.ReadOnlyField()

    class Meta:
        model = Vehicle
        fields = '__all__'
        read_only_fields = ('name_string')

SerializerType:

class VehicleModelType(DjangoSerializerType):
    class Meta:
        description = "Vehicle Model Type Definition"
        serializer_class = VehicleSerializer
        pagination = LimitOffsetGraphqlPagination(default_limit=25)
        filter_fields = {
            'stock': ['exact', ],
            'active': ['exact', ],
        }

However, name_string or nameString isn't an option when querying. Not sure if GDE looks for them, or what I need to do?

eamigo86 commented 6 years ago

Hello @evanheckert, in this case you must define a DjangoObjectType class for your Vehicle model, before your VehicleModelType class, just like this:

import graphene
from graphene_django_extras.paginations import LimitOffsetGraphqlPagination
from graphene_django_extras.types import DjangoObjectType

class VehicleType(DjangoObjectType):
    name_string= Field(String, source='name_string', description="Some text")

    class Meta:
        model = Vehicle
        filter_fields = {
            'stock': ['exact', ],
            'active': ['exact', ],
        }

class VehicleModelType(DjangoSerializerType):
    class Meta:
        description = "Vehicle Model Type Definition"
        serializer_class = VehicleSerializer
        pagination = LimitOffsetGraphqlPagination(default_limit=25)