I want to make a query that only displays variant_view_configuration field. How can I solve the problem? If I write like that (return User.objects.get(pk=instance.id).variant_view_configuration), it gives me an error - but I need only variant_view_configuration
class User(AbstractUser):
variant_view_configuration = ArrayField(models.CharField(max_length=200), default=list, blank=True)
class UserQueries(object):
user_variant_view_preference = graphene.Field(UserNode, id=graphene.ID(required=True))
def resolve_user_variant_view_preference(self, info, id):
instance = Node.get_node_from_global_id(info, id, only_type=UserNode)
if not instance:
raise ApplicationError.general.not_found(id)
return User.objects.get(pk=instance.id).variant_view_configuration
The GraphQL query:
QUERY = """
query Test($id: ID!) {
userVariantViewPreference(id: $id) {
variantViewConfiguration
}
}
"""
def test_user_variant_preference(graphql_request_maker):
user = User.objects.create(
username='username12',
email='[email protected]',
variant_view_configuration=["colors[0].sizes[0].size", "details.country_of_origin"]
)
data, err = graphql_request_maker.make(
QUERY,
{
"id": to_global_id('UserNode', user.id)
}
)
So, as I say, I want a query that return only and only variant_view_configuration for a specific User id.
I am new to django and graphql, please explain how I do this. Thank you!
CodePudding user response:
I will suggest that you filter through the instance.id and not get the instance id. So a good practice would be this:
class User(AbstractUser):
variant_view_configuration = ArrayField(models.CharField(max_length=200), default=list, blank=True)
class UserQueries(object):
user_variant_view_preference = graphene.Field(UserNode, id=graphene.ID(required=True))
def resolve_user_variant_view_preference(self, info, id):
instance = Node.get_node_from_global_id(info, id, only_type=UserNode)
if not instance:
raise ApplicationError.general.not_found(id)
return User.objects.filter(pk=instance.id).only('variant_view_configuration')
CodePudding user response:
You should change the resolver type from UserNode to graphene.List(graphene.String):
class User(AbstractUser):
variant_view_configuration = ArrayField(models.CharField(max_length=200), default=list, blank=True)
class UserQueries(object):
user_variant_view_preference = graphene.List(graphene.String, id=graphene.ID(required=True))
def resolve_user_variant_view_preference(self, info, id):
instance = Node.get_node_from_global_id(info, id, only_type=UserNode)
if not instance:
raise ApplicationError.general.not_found(id)
return User.objects.get(pk=instance.id).variant_view_configuration
