Разрешитель запросов Django для определенного поля (graphql)

Я хочу сделать запрос, который отображает только поле variant_view_configuration. Как я могу решить эту проблему? Если я пишу так (return User.objects.get(pk=instance.id).variant_view_configuration), то выдает ошибку - а мне нужно только 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

Запрос GraphQL:

QUERY = """
    query Test($id: ID!) {
        userVariantViewPreference(id: $id) {
            variantViewConfiguration
        }
    }
"""


def test_user_variant_preference(graphql_request_maker):
    user = User.objects.create(
        username='username12',
        email='btestare@example.com',
        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)
        }
    )

Итак, как я уже сказал, мне нужен запрос, который возвращает только и только вариант_просмотра_конфигурации для определенного идентификатора пользователя.

Я новичок в django и graphql, пожалуйста, объясните, как мне это сделать. Спасибо!

Я предлагаю фильтровать по instance.id и не получать id экземпляра. Поэтому хорошей практикой будет следующее:

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')

Вам следует изменить тип резольвера с UserNode на 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
Вернуться на верх