Вопросы с тегами [graphene-python]

1

голосов
1

ответ
254

Просмотры

Django multi-table inheritance and graphene

I am trying to serve a graphql endpoint through django-graphene. I have the following models: class BaseModel(models.Model): fk = models.ForeignKey(MainModel, related_name='bases') base_info = models.CharField(...) class ChildModel(BaseModel): name = models.CharField(...) MainModel being my central data model. There are several variants of ChildModel, which explains the multi-table inheritance used here. I have been able to get things to work with this schema declaration: class BaseModelType(DjangoObjectType): class Meta: model = BaseModel class ChildModelType(DjangoObjectType): class Meta: model = ChildModel class MainModelType(DjangoObjectType): class Meta: model = MainModel which allows the following graphQL query: { mainModel(id: 123) { id bases { id baseInfo childmodel { id name } } } } However, I'd like to flatten this the way Django understands the inheritance, so that I can query the data like this: { mainModel(id: 123) { id bases { id baseInfo name
Laurent S
1

голосов
1

ответ
243

Просмотры

Create mutations in GraphQL with a lot of use cases

I'm a newbie in GraphQL and need some advice (best practice) in creating mutations in GraphQL (particular with graphene-python). Let's suppose we have some Task and a User. Now I want to create Task mutation, that covers three cases: Create Task. Create Task and assign existing User to this Task. Create Task and assign newly created User to this Task. So, is this a good idea to implement this as a single QraphQL "entry point", or it's better to create another mutation for the third case (maybe)? mutation { createTask(taskTitle: "Do some stuff"){ task { id } } } mutation { createTask(taskTitle: "Do some stuff", user: {id: "ggdf00askladnl42"}){ task { id } } } mutation { createTask(taskTitle: "Do some stuff", user: {email: "[email protected]", fullName: "John Doe"}){ task { id } } } and respective mutation in graphene-python: class CreateTODO(graphene.Mutation): class Arguments: task_title = graphene.NonNull(graphene.String) user = UserInput() task = graphene.Field(lambda: Task) def mutate(self, info, task_title, user=None): # # Do some stuff here # return CreateTODO(task=task)
machin
1

голосов
1

ответ
225

Просмотры

GraphQL: как сортировать «внешний ключ» набор элементы элементов узла?

Я использую Django, графен-Джанго и Джанго-фильтр для создания GraphQL апи и имеет проблемы с OrderBy: В общем: у меня есть способности, каждый из них имеет несколько отделений. Я могу сортировать способности, но не может сделать то же самое с департаментами. Django модель: класс факультет (models.Model): код = Департамент класса models.CharField (...) (models.Model): код = models.CharField (...) факультет = models.ForeignKey (факультет, on_delete = модели .CASCADE, related_name = «отделы»,) для того, чтобы иметь возможность сортировать способности я добавил: импорт графеновых импорт django_filters из графена импорта реле, OBJECTTYPE из django_filters импорта OrderingFilter из graphene_django.types импорта DjangoObjectType из graphene_django.filter импорта DjangoFilterConnectionField класс FacultyFilter (django_filters. FilterSet): класс Meta:
Sergey
1

голосов
1

ответ
169

Просмотры

Как бороться с Джанго-графена с UUID первичных ключей в Джанго?

Мы используем Django и Джанго-графен для обеспечения GraphQL API. Мы имеем UUID первичных ключей в модели. Как правильно работать с ним?
shalakhin
1

голосов
0

ответ
47

Просмотры

DRF M2M Nested Serializer Field Incorrectly Typed as String

Whenever I attempt to deserialize a list of Technology objects while creating a TechnologyStack I receive the message: Field \"technologies\" of type \"String\" must not have a sub selection. I'm using djangorestframework==3.8.2. Anyone know what's causing this and/or a potential solution? Also, please note that I'm using the graphene-django library. But, it seems this problem is attributable to the drf serializer. class TechnologyProfile(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(max_length=100, unique=True) class Technology(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) profile = models.ForeignKey(TechnologyProfile, blank=True, null=True, on_delete=models.CASCADE) class Meta: verbose_name_plural = "technologies" class TechnologyStack(models.Model): technologies = models.ManyToManyField(Technology, related_name='technology_stacks') class TechnologyProfileSerializer(serializers.ModelSerializer): user_id = RelayIdField() name = serializers.CharField() class Meta: model = TechnologyProfile fields = ('id', 'name', 'user_id') class TechnologySerializer(serializers.ModelSerializer): user_id = RelayIdField() profile = TechnologyProfileSerializer(many=False) class Meta: model = Technology fields = '__all__' class TechnologyStackSerializer(serializers.ModelSerializer): technologies = TechnologySerializer(many=True) class Meta: model = TechnologyStack read_only_fields = ('id',) fields = '__all__'
lgants
1

голосов
0

ответ
226

Просмотры

Графен / Django (GraphQL): Как выполнить запрос с исключением некоторых полей от доступа?

Моя схема проста. Модель пользовательского пользователя из Джанго. Класс UserFilter (django_filters.FilterSet): класс Meta: поля модели = User = [ 'имя пользователя', 'электронная почта'] Класс UserNode (DjangoObjectType): класс Meta: модель = User only_fields = ( 'имя пользователя', 'электронная почта', ' is_staff», 'is_active', 'is_superuser', 'last_login', 'date_joined', 'профиль') интерфейсы = (graphene.relay.Node,) @classmethod защиту get_node (ЦБС, информация, идентификатор): попробуйте: пользователь = cls._meta.model.objects.get (ID = идентификатор), за исключением cls._meta.model.DoesNotExist: не возвращать None, если пользователь: запроса {пользователей {{края узла {имя пользователя идентификатор электронной isSuperuser}}}} Я получаю: { "данные": { "пользователей": { "ребра": [{ "узел": { "ID": "VXNlck5vZGU6NQ ==" , "имя пользователя": "Test4", "электронная почта": "[email protected]", "isSuperuser" ложь}}]}}} можно ли как разграничить доступ к полям в resolve_users? Исключение в фильтре не работает. Возможно, я не правильно понимаю конструкцию DjangoFilterConnectionField,
1

голосов
0

ответ
31

Просмотры

“Unknown type \”CreateAccountInput\". with graphene_django when trying to mutate/create new object

I'm new to graphQL and I've just been trying to create a new account object with it. This is my code right now but it the GUI for graphQL I keep getting the "Unknown type \"CreateAccountInput" error. schema.py from authentication.models import Account import graphene from graphene import relay, ObjectType from graphene_django import DjangoObjectType from graphene import InputObjectType class AccountGraphQL(DjangoObjectType): class Meta: model = Account interfaces = (relay.Node, ) class Query(graphene.ObjectType): username = graphene.String(argument=graphene.String(default_value="stranger")) email = graphene.String(argument=graphene.String(default_value="stranger")) password = graphene.String(argument=graphene.String(default_value="stranger")) first_name = graphene.String(argument=graphene.String(default_value="stranger")) info = graphene.String() def def_resolve_create_account(self, info, argument): return account.objects.create_user() class CreateAccountInput(InputObjectType): username = graphene.String(argument=graphene.String(default_value="stranger")) email = graphene.String(argument=graphene.String(default_value="stranger")) password = graphene.String(argument=graphene.String(default_value="stranger")) first_name = graphene.String(argument=graphene.String(default_value="stranger")) class CreateAccount(relay.ClientIDMutation): class Input: account = graphene.Argument(CreateAccountInput) new_account = graphene.Field(AccountGraphQL) @classmethod def mutate_and_get_payload(cls, args, context, info): account_data = args.get('account') # get account data from args account = Account() new_account = update_create_instance(account, account_data) return cls(new_account=new_account) class Mutation(ObjectType): create_account = CreateAccount.Field() schema = graphene.Schema(query=Query) result = schema.execute('{ create_account (argument: "graphql"') my mutation: mutation CreateNewAccount($input: CreateAccountInput!) { createAccount(input: $input) { newAccount { username email password first_name } clientMutationId } } my query {"input": {"account": { "username": "graphql", "email": "[email protected]", "password": "graphql", "first_name":"charles" } }} I'm not sure what the problem is here, as far as I'm concerned I've defined the input type
Charles Smith
1

голосов
1

ответ
102

Просмотры

Дразнящий ответ на GraphQL распознаватель запросов от ServiceObject для предотвращения вызовов API в UnitTests

Давайте предположим, что у меня есть следующий объект службы: класс Foo (объект): Защита бар (сам): возвращает [ «Foo», «бар»] И это схема: импорт Foo класса Query (graphene.ObjectType): бар = graphene.List (лямбда: graphene.String) Защита resolve_bar (самость, информация):. вернуться Foo () бар () Я пытаюсь проверить, если GraphQL схема правильно вызова панели методы в его распознавателе запроса. Итак, у нас есть этот кусок кода в тестах: от MySchema импорта класса Query TestFooBar (unittest.TestCase): @patch ( 'Foo') Защиту test_bar (я, mock_foo): mock_foo.return_value.bar.return_value = [ 'БАЗ ' 'QUX'] my_schema = graphene.Schema (запрос = запрос) = клиент клиент (self.my_schema) запрос = ''' запроса {бар ()} «»»= выполняется self.client.execute (запрос) #Some атрибуты, которые я хочу утверждать assertTrue (mock_foo.called) # возвращает значение False Почему я использую издевается? В оригинальном классе ServiceObject он делает некоторые API вызовы на другой сервис, который уже испытанный в изолированном способе. И в этом случае, я только хочу, чтобы проверить, если в строке запроса GraphQL является вызов метода, который будет возвращать его предполагаемый объект. Проблема Когда я издеваться ответ, что объект службы возвращается, как в приведенном выше коде, и сделать тест клиента Графен выполняет запрос, он дает мне «не высмеивал» ответ. Другими словами, это на самом деле вызывая оригинальный метод, предоставляемый классом объектов сервиса и делая API вызовы, которые не должны быть выполнены. Тем не мение, когда я создаю экземпляр и запустить себя класс ServiceObject, он правильно издеваться и возвращает [ «База», «QUX»] массив, не проходя через вызовы API. Есть ли кто-то есть Ideia того, что я делаю неправильно? Или ответы клиента GraphQL не должны быть издевались вообще? Есть ли подход, который я могу использовать вместо насмешливый его? Я уже посмотрел все через Интернет, чтобы увидеть, как люди делают это, но мне не удалось найти какие-либо возможные решения.
Lucas Charles
1

голосов
1

ответ
30

Просмотры

Как получить текущий экземпляр модели в графеновых питона DjangoObjectType

У меня есть класс DjangoObjectType графен-питон, и я хочу, чтобы добавить пользовательский тип, но я не знаю, как получить экземпляр модели в функции распознавателя. Я следую за этот учебник, но я не могу найти никаких ссылок. Это мой DjangoObjectTypeClass: класс ReservationComponentType (DjangoObjectType): component_str = graphene.String () Класс Meta: модель = ReservationComponent Защита resolve_component_str (самость, информация): # Как я могу получить текущий экземпляр ReservationComponent здесь ?. Я предполагаю, что это somewehere в «Информация», # но документация ничего не говорит о том, что current_reservation_component = info.get ( «reservation_component») компонент = current_reservation_component.get_component () возврата компонента. имя Мой вопрос отличается от графеновых распознавателя для объекта, который не имеет моделей, потому что мой объект ДЕЙСТВИТЕЛЬНО есть модель. Я не знаю, почему он был отмечен как «возможно дублируются» с такой очевидной разницей. Мой вопрос, на самом деле, на основе модели.
HuLu ViCa
1

голосов
0

ответ
26

Просмотры

Get Parent id in child schema in graphql django

Я хочу, чтобы получить объект класса ребенка в родительской схеме. Вот мой класс команды Models.py (DefaultFieldsModel): имя = models.CharField (max_length = 50, нуль = True, пусто = True) сокр = models.CharField (max_length = 50, нуль = True, пустой = True) Класс события ( DefaultFieldsModel): имя = models.CharField (max_length = 50, нуль = True, пустой = True) команда = models.foreignkey (Team) класс Bet (DefaultFieldsModel): имя = models.CharField (max_length = 50, нуль = True, пусто = True) = событие models.foreignkey (Event) Schema.py класс TeamType (DjangoObjectType): дом = graphene.Field (TeamType) класс Meta: модель = Team защиту resolver_home (самость, информация): ** # Здесь я хочу получить объект Bet и выполнить некоторые операции ** если team.bet_id == 2: печать ( "ставка") вернуться team.bet Класс BetType (DjangoObjectType): HOME_TEAM = graphene.Field (TeamType) Класс Meta: модель = Bet Защиту resolver_home_team (самость, информация): возвращение self.event.team В TeamType схеме я хочу купон, чтобы я мог выполнять операции. Я также попытался с graphene.String (), но это не помогло.
somil
0

голосов
0

ответ
5

Просмотры

Make cyclically dependent model properties queriable in graphene-django

Скажем, у меня есть модели Django, глядя следующим образом: класс пользователя (модель): имя пользователя = CharField (...) @property Защиту проектов (самостоятельно): возвращение # проектов пользователю присвоен класс проекта (модель): имя = CharField (. ..) пользователи @property четкости (Self): возвращение # пользователи, присвоенный класс проекта уступки (модель): пользователь = ForeignKey (проект пользователя) = ForeignKey (Project) (я намеренно не писал querysets для свойства, чтобы сделать код более читаемым.) Я хотел бы быть в состоянии видеть эти свойства в графеновых Джанго запросов. Мои ModelType классы выглядеть следующим образом: класс UserType (DjangoObjectType): класс Meta: модель = проекты пользователей = List (ProjectType) класс ProjectType (DjangoObjectType): класс Meta: модель = пользователи проекта = Список (UserType) Тем не менее, этот код не работает , так ProjectType в классе UserType не определен, и замена этих классов не поможет. Я пытался не включать в себя свойства на все и после того, как все классы ModelType созданы, я пытался добавить свойства через SetAttr (). Такой хак наверняка устанавливает атрибуты так классов имеют точно такую ​​же структуру, но это, кажется, слишком поздно: свойства не доступны из GraphQL вообще. Теперь я бежал из идей. Есть ли способ, чтобы достичь желаемого поведения? свойства не доступны из GraphQL вообще. Теперь я бежал из идей. Есть ли способ, чтобы достичь желаемого поведения? свойства не доступны из GraphQL вообще. Теперь я бежал из идей. Есть ли способ, чтобы достичь желаемого поведения?
karlosss
1

голосов
1

ответ
254

Просмотры

GraphQL и Графен

У меня есть схемы базы данных, которая имеет один ко многим отношений. Для, например, один отдел имеет много клиентов. Можно ли иметь мутации, которые создают клиентов и отдел и связать их? Или правильный путь, чтобы создать клиент, чем отдел, а затем связать друг с другом? Во втором подходе я должен сделать три поездки вместо одного. Может кто-то предоставить мне GraphQL обработки этой ситуации?
p.magalhaes
1

голосов
1

ответ
92

Просмотры

Графен-Python документация на клиентах зрения

Описание объекта на элементы схемы GraphQL может быть просмотрен клиентом. Например, GraphQL показывает значение описания для объекта поля в опережающем выпадающем списке, в котором перечислены полях, доступные внутри набора. Это же описание в разделе документации появляется. Может ли этот тип документации метаданных можно добавить через графен-GAE? Мой установить: models.py: класс Статья (ndb.Model): заголовок = ndb.StringProperty () author_key = ndb.KeyProperty (вид = 'Автор') created_at = ndb.DateTimeProperty (auto_now_add = True) импорт графена из импорта graphene_gae NdbObjectType Schema.py: класс СтатьяВид статьи (NdbObjectType): класс Meta: модель = Статья класса Query (graphene.ObjectType): статьи = graphene.List (СтатьяВид статьи) @ graphene.resolve_only_args защиту resolve_articles (Я):
1

голосов
2

ответ
757

Просмотры

есть возможный шанс пройти массив объектов (JSON), как поле ввода для мутации? графен-питон

Я пытаюсь передать JSon поле ввода для моей graphql мутации. Я пытался и не искать, но просто не повезло. Я могу передать массив штраф с Я знаю, определяя graphene.List (graphene.String) будет работать для передачи массива строк. Я понял, что есть тип по имени graphene.JSONstring (), который я думал, что будет работать, если я использую его с graphene.List (graphene.JSONstring), но не повезло, все еще получаю ошибки говорят типа не правильно. У меня есть что-то подобное во время мутации мутации {создания (данные: {field1: [{ "первый": "первый", "последний": "последний"}, { "первый": "first1", "последний":» last1" }]})}, Как для ввода класса класса NameInput (graphene.InputObjectType): # пожалуйста игнорируют те же имена полей, просто перечислить то, что я пытался field1 = graphene.JSONString () field1 = graphene.List (graphene.JSONString) field1 = graphene.List (graphene.String) кто-нибудь имеет представление о том, как это будет работать? заранее спасибо
Tsuna
1

голосов
1

ответ
840

Просмотры

Как сделать несколько запросов фильтров в графене колбе?

Я относительный новичок GraphQL, я пытаюсь сделать запрос, как этот {пользователя (имя пользователя: «Джон») {имя last_lame Имя Сообщения (in_draft: истина) {текст заголовка in_draft update_at}}} Я хочу, чтобы фильтровать список сообщений, которые пользователь имеет в проекте единственный способ, которым я могу сделать запрос находится через отношения моделей, но, не имея возможности фильтрации в должности в проекте. Один ко многим класса пользователя (Base): __tablename__ = 'пользователь' идентификатор = Column (Integer, primary_key = True) имя = Column (String) last_lame = Column (String) Имя пользователя = Column (String) класс Поста (базовый): __tablename__ = 'после' ID = Column (Integer, primary_key = True) название = Column (String) текст = Column (String) in_draft = Column (Boolean) post_id = Column (целое число,
afr
1

голосов
1

ответ
266

Просмотры

Джанго Графен, Передача JSON или ДИКТ данные в качестве входных данных для Мутации

У меня следующая ситуация: У меня есть пользователь, каждый пользователь имеет инвентаризацию. Я изо всех сил, чтобы объявить инвентаризацию пользователя в Мутация «CreateUser». Вот следующая мутация для создания пользователя: Мутация Создать {AddUser (UserData: {имя: «Shibunika», возраст: 21}} Я пытаюсь объявить инвентаризацию пользователя в этой мутации, я ожидал что-то вроде мутации Создать {AddUser (UserData: {имя: "Shibunika", возраст: 21, опись: { 'item1': 45 'item2': 25}} S эти числа являются количество каждого элемента Как определить эти входы в графене будет.? вы нежно показать мне схему для этого?
Icaro Amorim
1

голосов
1

ответ
0

Просмотры

Джанго Графен фильтр Внешняя модель

Мне нужно, чтобы отфильтровать объект мой запрос на серверную базу на разрешениях. Для следующего запроса: запрос {Фоос {имя идентификатор BarSet {имя идентификатор}}} Есть разрешения на Foo и бар, и мне нужно только вернуть некоторые Foo и некоторые бары. Я знаю, что я могу использовать поля просмотр для класса Foos FooType (DjangoObjectType): класс Meta: модель = класс Foo BarType (DjangoObjectType): класс Meta: модель = класс Bar Query (объект): Foos = graphene.List (FooType) DEF resolve_foos (самость, информация, ** kwargs): # ID_LIST = некоторый код, чтобы создать список идентификаторов возможного Фооса возвращающих Foo.objects.filter (id__in = ID_LIST) Скажем, у меня есть список возможных баров, как я могу сделать то же самое для фильтрации на панели при получении запроса от graphql запроса?
Yvain
1

голосов
1

ответ
455

Просмотры

Графен-Джанго - Как поймать ответ запроса?

Я использую Джанго и Джанго графен для сделать graphql API. По мнению моего приложения, я использую reactJS и реагировать-самозагрузку-таблицу. Реагировать-самозагрузку стол ожидает, что я передать ему массив объектов, но не поддерживает вложенные объекты. Я создал запрос в моем schema.py: класс ApplicationNode (DjangoObjectType): класс Meta: filter_fields модель = Application = [ 'имя', 'sonarQube_URL'] = интерфейсы (relay.Node,) класс Query (ObjectType): применение = реле. Node.Field (ApplicationNode) all_applications = DjangoFilterConnectionField (ApplicationNode) ответы на эти запросы JSON вложенные объекты, как это: { "данные": { "allApplications": { "ребро": [{ "узел": { "идентификатор": "QXBwbGljYXRpb25Ob2RlOjE =", "Название": "Foo", "sonarQubeUrl": "foo.com", "поток": { "ID": "QYBwbGljYXRpb45Ob2RlOjE =", "название": "flow_foo"}}}, { "узел": { " идентификатор ": "QXBwbGljYXRpb25Ob2RlOjI =", "название": "бар", "sonarQubeUrl": "bar.com" "поток": { "ID": "QXBwbGljYXRpb26Ob2RlOjA =", "название": "flow_bar"}}}] }}} Я должен положить их ровными, прежде чем дать им React-самозагрузку стола. Что это лучший способ, перехватывать результаты графена Джанго запросов, чтобы поместить их квартиру или сделать эту работу в режиме ReactJS? Если первый способ лучше, как перехватить результаты графена Джанго запросов, чтобы поместить их квартиру?
Neau Adrien
1

голосов
1

ответ
807

Просмотры

Расширение аргументы запроса в графене / graphene_django

Как добавить аргументы без полей на запрос GraphQL в графене? Вот пример использования. Я хотел бы быть в состоянии сделать: {ВПГ (час: 40, с: 128, v: 54) {имя} RGB с этой моделью Django: от django.db импортных моделей от django.core.validators импорта MinValueValidator, MaxValueValidator , класс Color (models.Model): имя = models.CharField ( "имя", max_length = 24, нуль = False, пробел = False) г = models.IntegerField ( "красный", нуль = False, пустой = False, валидаторы = [MinValueValidator (0), MinValueValidator (255)]) г = models.IntegerField ( "зеленый", нулевая = False, пустой = False, валидаторов = [MinValueValidator (0), MinValueValidator (255)]) б = models.IntegerField ( "синий", нуль = False, пусто = False, если не все (карта (лямбда х: в арг, [ 'ч', 'S', 'v'])): # Аргументы отсутствуют возврата None R, G, B = hsv_to_rgb (арг [ 'H'], арг [ 's'], арг [ 'v']) возвращает Color.objects.get (г = г, г = г, б = б) Защитой resolve_named (сама, арг, контекст, информация): если не 'имя' в арг: # аргументы пропавшие возвращения None возврата Color.objects.get (имя = арг [ «имя»]) оно не потому, что аргументы не принимаются. Что мне не хватает? арг, контекст, данные): если не «имя» в аргументах: # Аргументы пропавшие возвращения None возврата Color.objects.get (имя = арг [ «имя»]) оно не потому, что аргументы не принимаются. Что мне не хватает? арг, контекст, данные): если не «имя» в аргументах: # Аргументы пропавшие возвращения None возврата Color.objects.get (имя = арг [ «имя»]) оно не потому, что аргументы не принимаются. Что мне не хватает?
Scott Deerwester
1

голосов
2

ответ
498

Просмотры

Графен Django без Django модели?

Я успешно использовал Графен-Django, чтобы успешно построить несколько вызовов GraphQL. Во всех этих случаях я заселенные, полностью или частично, модель Django, а затем вернулась записями я заселенная. Теперь у меня есть ситуации, когда я хотел бы вернуть некоторые данные, которые я не хочу, чтобы хранить в модели Django. Возможно ли это сделать с графена? Роберт
Robert_LY
1

голосов
2

ответ
149

Просмотры

GraphQL relations leaking data, even with context.user resolver already set. How to prevent data exposure via relations?

Как каждый делает проверку подлинности через отношения, чтобы защитить данные от пройденного через отношения? Например, у нас есть магазин, который имеет пользователь. // Возвращает ошибку, как я уже установлен пользовательский распознаватель, чтобы разрешить только context.user.is_shop_owner {{магазины пользователи имени {почте ...}}} Этот запрос обычно блокируются с помощью пользовательского распознавателя как context.user.is_shop_owner, так что вы не может выполнить это от корня запроса. Однако, если злоумышленник пересекает отношения для достижения объекта пользователей, он может получить конфиденциальные данные пользователя. // Данные подвергаются не-intendedly из-за отношения обхода. Как это предотвратить? {изделия {имя цена магазин {пользователи {...} // бум, подвергаются}}} Это ошибка в graphql? Как вы, ребята работают вокруг этого? Это на питон-графен стек кстати. Edit: Кстати, я знаю, что мы можем сделать exclude_fields, но тогда я не буду иметь возможности доступа пользователей из ShopNode, которая является важной информацией для запроса ShopNode, поэтому предельные поля, вероятно, не является хорошей идеей. (Изм)
clodal
1

голосов
1

ответ
826

Просмотры

Преобразование JSON в ответ графен graphql

Я использую графена и флягу создать сервер graphql. У меня есть запрос, который является довольно дорогим, и хотел бы кэшировать. В настоящее время я вручную выполнить схему, чтобы получить результат в формате JSON, который я тогда упорствовать в базе данных. Я думаю, что я могу перехватить запрос в ПО промежуточного слоя, но не знаете, как преобразовать JSON у меня есть в формате графена знает, как обращаться.
harinsa
1

голосов
1

ответ
947

Просмотры

Graphene Mutation error, fields must be a mapping (dict / OrderedDict)

Я начинаю, чтобы обернуть вокруг моей головы с GraphQl / графена. Я строю схему, соединенную с MongoDB. Все, кажется, работает до сих пор, за исключением мутаций. Я следовал примеру здесь и здесь не повезло. Может кто-то момент меня к тому, что я делаю неправильно? Заранее спасибо. импорт графен класс GeoInput (graphene.InputObjectType): ш = graphene.Float (требуется = True) LNG = @property Защита LatLng (сам) graphene.Float (требуется = True): возвращение "({}, {})" формат. (self.lat, self.lng) класс Address (graphene.ObjectType): LatLng = graphene.String () класса CreateAddress (graphene.Mutation): класс Аргументы: гео = GeoInput (требуется = True) Выход = Адрес защиту мутировать (самообеспечение , информация, гео): обратный адрес (LatLng = geo.latlng) класс Мутация (graphene.ObjectType):
DevilWarrior
1

голосов
1

ответ
436

Просмотры

Автоматическое создание graphql схемы для реле (сервер Графен)

Я новичок в релейном и пытаюсь соединить мое первое приложение. У меня уже есть сервер GraphQL (с использованием графена), что подкреплено PostgreSQL DB через SQLAlchemy Automap, и опубликованный как приложение Flask. Теперь я пытаюсь соединить передний конец, и это выглядит как реле-компилятор ожидает файл схемы GraphQL на стороне клиента. Я интересно, если есть способ, чтобы этот файл схема динамически генерируются автоматически, и как это можно было бы создать. Я использую https://github.com/kriasoft/react-static-boilerplate в качестве отправной точки для моего приложения. Благодарю.
llevar
1

голосов
1

ответ
475

Просмотры

Django-graphene: how to filter with an OR operator

Я довольно новый и с Django и графена, и не мог обойти проблему, которая может быть довольно простым, но у меня не было никакой удачи с Docs или Google, чтобы получить ответ. Скажем, у меня есть следующие модели: класс Закон (models.Model): год = models.IntegerField (по умолчанию = None) число = models.IntegerField (по умолчанию = None) Описание = TextField (по умолчанию = None) тело = models.TextField ( по умолчанию = None) и следующая схема: класс LawType (DjangoObjectType): класс Meta: модель = models.Law filter_fields = { "год": [ "точное"], "число": [ "точное"], "описание": [ "содержит"], "тело": [ "icontains"],} = интерфейсы (graphene.Node,) класс запросов (graphene.AbstractType): all_laws = DjangoFilterConnectionField (LawType) Защита resolve_all_laws (самостоятельно, арг, контекст, информация): возвращение models.Law.objects.all () Как сделать запрос или определить класс FilterSet так, что он будет возвращать список объектов, такие, что слово встречается в описании или в теле? {AllLaws (description_Icontains: «преступник», body_Icontains: «преступник») {ребра {узел {год число}}}} Я не мог найти ответ в документации графена Джанго, ни в документации Джанго-фильтра. Любые подсказки? заранее спасибо все () Как сделать запрос или определить класс FilterSet так, что он будет возвращать список объектов, например, что слово встречается в описании или в теле? {AllLaws (description_Icontains: «преступник», body_Icontains: «преступник») {ребра {узел {год число}}}} Я не мог найти ответ в документации графена Джанго, ни в документации Джанго-фильтра. Любые подсказки? заранее спасибо все () Как сделать запрос или определить класс FilterSet так, что он будет возвращать список объектов, например, что слово встречается в описании или в теле? {AllLaws (description_Icontains: «преступник», body_Icontains: «преступник») {ребра {узел {год число}}}} Я не мог найти ответ в документации графена Джанго, ни в документации Джанго-фильтра. Любые подсказки? заранее спасибо т найти ответ в документации графена Джанго, ни в документации Джанго-фильтра. Любые подсказки? заранее спасибо т найти ответ в документации графена Джанго, ни в документации Джанго-фильтра. Любые подсказки? заранее спасибо
Biagio Distefano
1

голосов
1

ответ
1k

Просмотры

Почему мой запрос Graphql возвращение нуль?

Я пытаюсь создать приложение graphql весь мне легко получить доступ к данным из games.espn.com, и я имею вопрос о моих запросах, возвращающих нуль. Я интересно, если я, возможно, пропустил возврат или разрешить функцию где-нибудь? Я обыскивал этот код в течение нескольких дней и не могу понять, почему это не возвращает значение. Вот мой файл schema.js: Const {GraphQLObjectType, GraphQLString, GraphQLInt, GraphQLSchema, GraphQLList, GraphQLNonNull, GraphQLBoolean, GraphQLFloat} = требуется ( 'graphql'); константный Axios = требуется ( 'AXIOS'); Const запрос = требуется ( 'запрос'); Const PlayerType = новый GraphQLObjectType ({имя: 'Игрок', поля :() => ({Droppable: {Тип: GraphQLBoolean}, percentStarted: {Тип: GraphQLFloat}, джерси: {Тип: GraphQLString}, playerRatingSeason: {Тип: GraphQLFloat}, isIREligible: {Тип: GraphQLBoolean}, draftRank: {Тип: GraphQLInt}, universeId: {Тип: GraphQLInt}, Firstname: {Тип: GraphQLString}, LastName: {Тип: GraphQLString}, sportsId: {Тип: GraphQLInt} , healthStatus: {Тип: GraphQLInt}, percentOwned: {Тип: GraphQLFloat}, proTeamId: {Тип: GraphQLInt}, tickerId: {Тип: GraphQLInt}, IsActive: {Тип: GraphQLBoolean}, playerId: {Тип: GraphQLInt}, percentChange : {Тип: GraphQLFloat}, defaultPositionId: {Тип: GraphQLInt}, totalPoints: {Тип: GraphQLFloat},})}); Const CurrentPeriodProjectedStatsType = новый GraphQLObjectType ({имя: 'CurrentPeriodProjectedStats', поля :() => ({appliedProjectedStatTotal: {Тип: GraphQLFloat}})}); Const CurrentPeriodRealStatsType = новый GraphQLObjectType ({имя: ' CurrentPeriodRealStats', поля :() => ({appliedRealStatTotal: {Тип: GraphQLFloat}})}); Const PlayerSlotType = новый GraphQLObjectType ({имя: 'PlayerSlot', поля :() => ({pvoRank: {Тип: GraphQLInt}, игрок: {Тип: PlayerType}, WatchList: {Тип: GraphQLBoolean}, isKeeper: {Тип: GraphQLBoolean}, isTradeLocked: {тип: GraphQLBoolean}, currentPeriodProjectedStats: {Тип: CurrentPeriodProjectedStatsType}, opponentProTeamId: {Тип: GraphQLInt}, slotCategoryId: {Тип: GraphQLInt}, lockStatus: {Тип: GraphQLInt}, isQueuedWaiverLocked: {Тип: GraphQLBoolean} , currentPeriodRealStats: {Тип: CurrentPeriodRealStatsType}})}); Const SlotsType = новый GraphQLObjectType ({имя: '' Слоты, поля :() => ({player0: {Тип: PlayerSlotType}, player1: {Тип: PlayerSlotType}, player2: {Тип: PlayerSlotType}, player3: {Тип: PlayerSlotType}, player4: {Тип: PlayerSlotType}, player5: {Тип: PlayerSlotType}, player6: {Тип: PlayerSlotType} , player7: {Тип: PlayerSlotType}, player8: {Тип: PlayerSlotType}, Игрок9: {Тип: PlayerSlotType}, player10: {Тип: PlayerSlotType}, player11: {Тип: PlayerSlotType}, player12: {Тип: PlayerSlotType}, player13 : {Тип: PlayerSlotType}, player14: {Тип: PlayerSlotType}, player15: {Тип: PlayerSlotType},})}); Const DivisionType = новый GraphQLObjectType ({имя: 'Отдел', поля: () => ({DivisionName: {Тип: GraphQLString}, divisionId: {Тип: GraphQLInt}, размер: {Тип: GraphQLInt}})}); Const TeamType = новый GraphQLObjectType ({имя: 'Команда', поля :() => ({divisionStanding: {Тип: GraphQLInt}, overallStanding: {Тип: GraphQLInt}, waiverRank: {Тип: GraphQLInt}, деление: {тип: DivisionType}, teamAbbrev: {Тип: GraphQLString}, teamNickname: {Тип: GraphQLString}, logoUrl: {Тип: GraphQLString}, teamLocation: {Тип: GraphQLString}, TeamID: {Тип: GraphQLInt}, Logotype: {Тип: GraphQLString} })}); Const List0Type = новый GraphQLObjectType ({имя: 'List0', поля: () => ({Слоты: {Тип: SlotsType}, команда: {Тип: TeamType}, TeamID: {Тип: GraphQLInt}, appliedActiveProjectedTotal: {Тип: GraphQLFloat}, appliedInactiveProjectedTotal: {Тип: GraphQLFloat}, appliedActiveRealTotal: {Тип: GraphQLFloat}, appliedInactiveRealTotal: {Тип: GraphQLFloat},})}); Const TeamsType = новый GraphQLObjectType ({имя: 'Команды', поля: () => ({песни0: {Тип: List0Type}, песни1: {Тип: List0Type}})}); // нужно определить каждый тип по отдельности, работая снизу вверх и создания типов при необходимости сопзЬ BoxscoreType = новый GraphQLObjectType ({имя: 'Boxscore', поля: () => ({команд: {Тип: TeamsType, / * Решимость (boxscore) {вернуть boxscore.teams;} * /}, scoringPeriodId: {Тип: GraphQLInt,}, matchupPeriodId: {Тип: GraphQLInt,}, homeTeamBonus: {Тип: GraphQLInt,}})}); Const MetadataType = новый GraphQLObjectType ({имя: 'метаданных', поля: {leagueId: {Тип: GraphQLString}, статус: {Тип: GraphQLString}, dateModifiedLeague: {Тип: GraphQLString}, seasonId: {Тип: GraphQLString}}} ); Const BoxscoreDataType = новый GraphQLObjectType ({имя: 'BoxscoreData', поля: {boxscore: {Тип: BoxscoreType}, метаданные: {тип: MetadataType},},}); Const EspnQuery = новый GraphQLObjectType ({имя: 'EspnQuery', поля: {getBoxscore: {Тип: BoxscoreDataType, Args: {leagueId: {имя: 'leagueId', тип: новый GraphQLNonNull (GraphQLInt)}, seasonId: {имя: ' seasonId», введите: новый GraphQLNonNull (GraphQLInt)}, scoringPeriodId является: «+ scoringPeriodId); возвращающие Вардар (URL) .then (Рез => res.data); }}}}); // Хранить в нижней части // module.exports = новый GraphQLSchema ({запроса: EspnQuery}); И запрос я бегу в Graphiql является: {getBoxscore (leagueId: 1150587, seasonId: 2017, TeamID: 5, scoringPeriodId: 7) {{boxscore команды {{List0 Слоты {player0 {игрок {FirstName}}}}}} }} Который, к сожалению, возвращается: { "данные": { "getBoxscore": { "boxscore": { "команды": { "песни0": нулевая}}}}} возвращающие Вардар (URL) .then (Рез => res.data); }}}}); // Хранить в нижней части // module.exports = новый GraphQLSchema ({запроса: EspnQuery}); И запрос я бегу в Graphiql является: {getBoxscore (leagueId: 1150587, seasonId: 2017, TeamID: 5, scoringPeriodId: 7) {{boxscore команды {{List0 Слоты {player0 {игрок {FirstName}}}}}} }} Который, к сожалению, возвращается: { "данные": { "getBoxscore": { "boxscore": { "команды": { "песни0": нулевая}}}}} возвращающие Вардар (URL) .then (Рез => res.data); }}}}); // Хранить в нижней части // module.exports = новый GraphQLSchema ({запроса: EspnQuery}); И запрос я бегу в Graphiql является: {getBoxscore (leagueId: 1150587, seasonId: 2017, TeamID: 5, scoringPeriodId: 7) {{boxscore команды {{List0 Слоты {player0 {игрок {FirstName}}}}}} }} Который, к сожалению, возвращается: { "данные": { "getBoxscore": { "boxscore": { "команды": { "песни0": нулевая}}}}} экспорт = новый GraphQLSchema ({запрос: EspnQuery}); И запрос я бегу в Graphiql является: {getBoxscore (leagueId: 1150587, seasonId: 2017, TeamID: 5, scoringPeriodId: 7) {{boxscore команды {{List0 Слоты {player0 {игрок {FirstName}}}}}} }} Который, к сожалению, возвращается: { "данные": { "getBoxscore": { "boxscore": { "команды": { "песни0": нулевая}}}}} экспорт = новый GraphQLSchema ({запрос: EspnQuery}); И запрос я бегу в Graphiql является: {getBoxscore (leagueId: 1150587, seasonId: 2017, TeamID: 5, scoringPeriodId: 7) {{boxscore команды {{List0 Слоты {player0 {игрок {FirstName}}}}}} }} Который, к сожалению, возвращается: { "данные": { "getBoxscore": { "boxscore": { "команды": { "песни0": нулевая}}}}}
Zachary Bloss
1

голосов
1

ответ
163

Просмотры

Как попасть внешний graphql URL с помощью GQL

Как попасть внешний graphql URL с помощью GQL? Согласно GitHub репо: от GQL импорта GQL, клиента Client = Клиента (схемы = схема) запрос = GQL ( '' '{привет} ''') client.execute (запрос) Несмотря на то, автор сказал, что вдохновлен Аполлоном клиент, я не вижу способа предоставления URL при выполнении graphql.
Tevin Joseph K O
1

голосов
1

ответ
644

Просмотры

Настройка простой графена вложенный запрос

Я успешно создал запрос все графена, который отвечает на запрос {человек (ID: «Мэри») {имя ID}} Теперь я хочу, чтобы расширить это, чтобы иметь возможность перебрать всех людей и возвращать аналогичные данные для каждого. запроса {люди {подсчитывать allPersons {имя}}} Как я получаю resolve_allPersons решающий в людях, чтобы назвать человек распознаватель для каждого человека?
user2302244
1

голосов
1

ответ
184

Просмотры

Использование DjangoFilterConnectionField с пользовательским Connection в graphene_django

Я пытаюсь использовать что-то вроде этого: класс User (DjangoObjectType): класс Meta: модель = auth_models.User filter_fields = ( 'электронной почты',) интерфейсы = (Node,) соединение = класс UserConnection UserConnection (подключение): дополнительный = graphene.String () класс Meta: узел = класс пользователя Query (graphene.ObjectType): users_connection = DjangoFilterConnectionField (Пользователь, где = UserWhereInput ()) Из моего понимания, узел пользователя должен быть передан UserConnection на это мета, и UserConnection должен передаются пользователь на его мете. Тем не менее, это создает перекрестные ссылки. Любая помощь?
helpse
1

голосов
2

ответ
575

Просмотры

Джанго и Графно: Как справиться с двунаправленной связью с polmorphic моделей?

У меня есть модель Django, которая выглядит следующим образом (упрощенно, конечно): от django.db импортных моделей от polymorphic.models импорта класса PolymorphicModel турнир (models.Model): пробковый = models.CharField (max_length = 100, уникальный = True) класс Событие (PolymorphicModel): турнир = models.ForeignKey (турнир, related_name = 'событие') пробковый = models.CharField (max_length = 100) класс PracticeEvent (Event): класс паса MatchEvent (Event): победитель = models.CharField (max_length = 100, нуль = True, пустой = True, по умолчанию = None) Турниры состоят из двух видов событий: практика событий и матчей. Я хотел бы выставить эту модель, используя GraphQL, используя графена. Это то, что я придумал: импорт графена из graphene_django импорта DjangoObjectType из. импортные модели класса TournamentType (DjangoObjectType): класс Meta: Я могу запросить события {...} непосредственно, и даже турнир доступен. Однако, как нет DjangoObjectType с моделью = models.Event, я не могу запрашивать турниры {события {...}} ... Как я могу это исправить? Я не могу сделать EventType DjangoObjectTpe, и я не знаю, чтобы добавить поле событий после того, как факт.
Silly Freak
9

голосов
1

ответ
1k

Просмотры

GraphQL,Cassandra and denormalization strategy

Будут ли база данных как Кассандра и схема, как GraphQL хорошо работают вместе? Cassandra идеология основана на идее оптимизации запросов и денормализации данных. Это, кажется, не очень хорошо сетка с идеологией GraphQL, где данные, кажется, быть доступными на каждом уровне запроса. Пример: Предположим, что я архитектор мой Cassandra таблицы следующим образом: Пользователь: имя адрес и т.д. ... (многие свойства) Группа: идентификатор имя user_name (денормализованной пользователя, где мы обычно просто нужно имя пользователя) Но с GraphQL, это один Wouldn «т точно ожидать Денормализованный пользователя. запрос getGroup {группа (ID: 1) {имя пользователей {имя}}} Так несколько вещей: 1.) Этот запрос GraphQL может в конечном итоге попав в нашей базе данных Cassandra несколько раз (не предполагая кэширования). Получение имени группы и для каждого из пользователей, мы могли бы даже ударить его для каждого пользователя. Но позволяет сказать, что наше решение создает несколько объектов пользователя с одним Кассандрой вызова. 2.) Мы не можем построить идиоматическую базу данных Cassandra с денормализацией и graphql в виде, мы можем? В противном случае следует ожидать некоторые свойства пользователя не возвращаются к нам с запросом. Подытоживая вопрос, какова стратегия graphql для работы с денормализованными данным? Приемлемо ли опустить некоторые свойства, которые клиент посчитает доступны? Например, клиент пытается получить доступ к адресу пользователя, но мы не имеем, что на данный момент, потому что наш данные денормализованные. Или один даже не беспокоиться о денормализации и просто позволить graphQL совершать звонки с механизмом кэширования в между БД и graphql. Например graphql первым получает группу,
carboncomputed
2

голосов
1

ответ
208

Просмотры

GraphQL запросов в Django возвращения None

Привет, ребята, так что я пытаюсь использовать graphQL запросы в Джанго. В принципе у меня есть два приложения, мое «API» приложение, которое содержит все, что нужно, чтобы сделать запросы и еще один под названием «интерфейс», из которого я называю апите использовать эти запросы. Я могу использовать представление GraphQL для ввода запросов в нем, и он прекрасно работает, но всякий раз, когда я пытаюсь сделать запрос, я получаю это: «OrderedDict ([(„пользователей“, Нет)])» Результат моего запроса в GraphQl вид и для кода: в «API» мой schema.py: импорт графен импорт graphql_jwt из реле импорта графен, ObjectType, AbstractType, List, String, поле, InputObjectType из graphene_django импорта DjangoObjectType из graphene_django.filter импорта DjangoFilterConnectionField от даты и времени даты импорта, Дата и время от django.contrib.auth.models импорта пользователя из django.contrib.
Victor Guegan
4

голосов
1

ответ
533

Просмотры

Graphene mutation not mapping Models in SQL Alchemy

I am trying to perform mutation on User models declared using SQL ALCHEMY. Here is the code for my models.py file # blog/models.py from sqlalchemy import * from sqlalchemy.orm import (scoped_session, sessionmaker, relationship, backref) from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:///database.sqlite3', convert_unicode=True) db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine)) Base = declarative_base() # We will need this for querying Base.query = db_session.query_property() class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key= True) name = Column(String) email = Column(String) posts = relationship("Post", backref="user") class Post(Base): __tablename__ = 'post' id = Column(Integer, primary_key= True) title = Column(String) text = Column(Text) user_id = Column(Integer, ForeignKey('user.id')) This is Schema.py file import graphene from graphene import relay from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField from models import db_session,User as UserModel, Post as PostModel from sqlalchemy import * class User(SQLAlchemyObjectType): class Meta: model = UserModel interfaces = (relay.Node, ) class Post(SQLAlchemyObjectType): class Meta: model = PostModel interfaces = (relay.Node, ) class CreateUser(graphene.Mutation): class Input: name = graphene.String() ok = graphene.Boolean() user = graphene.Field(User) @classmethod def mutate(cls, instance, args, context, info): new_user = User(name=args.get('name')) db_session.add(new_user) db_session.commit() ok = True return CreateUser(user=new_user, ok=ok) class Query(graphene.ObjectType): node = relay.Node.Field() user = relay.Node.Field(User) allUsers = SQLAlchemyConnectionField(User) class MyMutations(graphene.ObjectType): create_user = CreateUser.Field() schema = graphene.Schema(query=Query, mutation = MyMutations, types = [User, Post]) When i try performing following mutation, this is the error i get : --Query-- mutation Test{ createUser(name:"tess"){ ok user{ name } } } --Result-- { "errors": [ { "message": "Class 'schema2.User' is not mapped", "locations": [ { "line": 2, "column": 3 } ] } ], "data": { "createUser": null } }
user2714410
5

голосов
1

ответ
1.5k

Просмотры

Query for enum value in GraphQL

Suppose I have a model like this class Order(models.Model): STATES = [ (1, 'Initiate'), (2, "Brief"), (3, "Planning"), (4, "Price Negotiate"), (5, "Executing"), (6, "Pending"), (7, "Completed"), (8, "Canceled"), (9, "Failed"), (10, "Paid"), ] state = models.PositiveSmallIntegerField( choices=STATES, default=1 ) When I pair this model with its Graphene object type companion class OrderNode(graphene_django.DjangoObjectType): class Meta: model = Order interfaces = (relay.Node,) An enum type with name OrderState! is created. I am concerned with How can I query for the enums How can I manage enums in React with Apollo client For the first question, I have this query { customer(id: "Q3VzdG9tZXJOb2RlOjE=") { name orders { edges { node { state } } } } } It gives me a weird state value like A_1 and A_2. I was expecting it to give me some meaningful value like "Initiate". How can I get the value of the kv pair enum? For the second question, if I want to present to user a list of possible value for this enum, how can I do so?
Khanetor
5

голосов
2

ответ
218

Просмотры

graphql причины-аполлон - рекурсивный разбор вариантов

Я использую Reason-Аполлон разобрать довольно вложен ответ GraphQL от моего сервера. У меня возникли проблемы при разборе волосатого дерева вариантов, возвращаемых из моего GraphQL сервера (я использую Джанго-графен). Вот запрос GraphQL и Reason Реагировать модуль с помощью Reason Apollo: модуль GroupQuery = [% graphql {| запрос GetChatGroup ($ chatGroupId: ID) {chatGroup (ID: $ chatGroupId) {пользователи идентификатор {ребра {узла {идентификатор имя isCurrentUser}}} сообщения {ребра {узла {идентификатор текста автор {имя аббревиатура photoUrl isCurrentUser}}}}} } |}]; / * В конце концов, будет reducerComponent * / пусть компонент = ReasonReact.statelessComponent ( "RechatWindow"); Модуль запрос = RechatApollo.Instance.Query; пусть parseMessages = chatGroup => переключатель chatGroup {| Некоторые из них (chatGroup) => переключатель chatGroup сообщения ## {| Некоторые (сообщения) => пусть ребро = сообщения ## ребер; переключить края {| Некоторые из них (ребра) => пусть parsedNodes = Js.Array.map (узел => коммутационного узла {| Некоторые из них (узел) => пусть ID = узел ## идентификатор, пусть текст = узел ## текст, пусть автор = узел ## автор, переключатель (идентификатор, текст, автор) {| (Некоторые из них (идентификатор), некоторые (текст), некоторые (автор)) => пусть имя = имя автора ##, пусть Abbrev = авторскую ## аббревиатуру, пусть isCurrentUser = автора ## isCurrentUser; переключатель (название, аббревиатура, isCurrentUser) {| (Некоторые из них (имя), некоторые (аббревиатура), некоторые (isCurrentUser)) => идентификатор ++ "-" ++ текст ++ "-" ++ имя ++ "-" ++ ++ Abbrev "-" | _ => "Ошибка при получении сообщения 3"}; | _ => "Ошибка при получении сообщения 2"}; | _ => "Ошибка при получении сообщения 1"}, края); parsedNodes; | Отсутствует => [||]}; | Отсутствует => [||]}; | Отсутствует => [||]}; пусть делают = (_children) => {... компонент визуализации: (_) => {пусть unexpectedError = (ReasonReact.stringToElement ( "Был внутренняя ошибка")); пусть groupQuery = GroupQuery.make (~ chatGroupId =» "Аббревиатура": "U1", "photoUrl": "", "isCurrentUser": истинно}}}, ... У меня есть синтаксическая ошибка где-то ... 137 ┆ | Загруженный (результат) => {138 ┆ пусть chatGroup = разбор (результат) ## chatGroup; 139 ┆ пусть parsedMessages = parseMessages (chatGroup); 140 ┆ 141 ┆ (Это имеет тип: вариант (Js.t ({ID:. Строка, сообщения:. (Опция Js.t ({кромки: массив. (Вариант (Js.t ({узел: вариант (Js.t . ({автор: ID: опция (строка), текст: опция (строка)}))))}))})) Типы для метода кромок несовместимы Моим непосредственным вопрос: каково здесь ошибка? На более глубоком уровне, разбор всех этих вариантов, чтобы сделать желаемый ответ, кажется, что это, как правило, производит довольно неясный код. Так что это общая парадигма вокруг вариантов разбора в JS при использовании ReasonML / OCaml? Есть ли идиоматический способ, чтобы получить все варианты, которые будут там большой частью времени? Должен ли я создать тип объекта или тип записи и анализа в тех, и затем делает из «известных» объектов или записей структур? Или, возможно, моя graphql_schema.json и конечная точка должна иметь более необходимые варианты? Кроме того, я использую GraphQL конвенцию реле наличия ребер {узлы {... узловые полей ...}}, и кажется, что если есть какие-либо ребро, то должно быть по крайней мере один узлом. Есть ли способ, чтобы сократить вариант многословие при использовании реле в стиле GraphQL? объект или запись структур? Или, возможно, моя graphql_schema.json и конечная точка должна иметь более необходимые варианты? Кроме того, я использую GraphQL конвенцию реле наличия ребер {узлы {... узловые полей ...}}, и кажется, что если есть какие-либо ребро, то должно быть по крайней мере один узлом. Есть ли способ, чтобы сократить вариант многословие при использовании реле в стиле GraphQL? объект или запись структур? Или, возможно, моя graphql_schema.json и конечная точка должна иметь более необходимые варианты? Кроме того, я использую GraphQL конвенцию реле наличия ребер {узлы {... узловые полей ...}}, и кажется, что если есть какие-либо ребро, то должно быть по крайней мере один узлом. Есть ли способ, чтобы сократить вариант многословие при использовании реле в стиле GraphQL?
P. Myer Nore
6

голосов
0

ответ
366

Просмотры

Mutation for nested object

I'm trying to implement GrapgQL mutation for a "complex" object. Let's say we have a Contact with three fields: firstName, lastName and address, which is object with one field street: Here is my python scheme implementation: class Address(graphene.ObjectType): street = graphene.String(description='Street Name') class AddressInput(graphene.InputObjectType): street = graphene.String(description='Street Name', required=True) class Contact(graphene.ObjectType): first_name = graphene.String(description='First Name') last_name = graphene.String(description='Last Name') address = graphene.Field(Address, description='Contact address') class ContactInput(graphene.InputObjectType): first_name = graphene.String(description='First Name', required=True) last_name = graphene.String(description='Last Name', required=True) address = AddressInput(description='Contact address', required=True) class CreateContact(graphene.Mutation): class Input: contact = ContactInput() contact = graphene.Field(Contact, description='Created Contact object') @staticmethod def mutate(instance, args, context, info): contact = Contact(**args['contact']) return CreateContact(contact=contact) and when I run this query: mutation CreateContact($contact: ContactInput!) { createContact(contact: $contact) { contact { firstName address { street } } } } with the following variables: { "contact": { "address": { "street": "Bond Blvd" }, "firstName": "John", "lastName": "Doe" } } I get the following result: { "createContact": { "contact": { "address": { "street": null }, "firstName": "John" } } } As you can see, street field is null in results. I can get what I need if I change mutate method to be like: @staticmethod def mutate(instance, args, context, info): args['contact']['address'] = Address(**args['contact']['address']) contact = Contact(**args['contact']) return CreateContact(contact=contact) But I'm not sure this is a proper way. So please advise a correct way to initiate nested structures.
Pavel Reznikov
3

голосов
1

ответ
324

Просмотры

Ошибка фильтра Джанго в GraphQL примере поваренной

Я в настоящее время обучение GraphQL через учебник по графена. однако я столкнулся с этой ошибкой, когда я попытался запустить python3 manage.py graphql_schema Ошибка: Traceback (самый последний вызов последнего): Файл «manage.py», строка 10, в execute_from_command_line (sys.argv) Файл «/ Library / Frameworks /Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/management/__init__.py "строка 354, в execute_from_command_line utility.execute () Файл" /Library/Frameworks/Python.framework /Versions/3.5/lib/python3.5/site-packages/django/core/management/__init__.py "строка 346, в казнить self.fetch_command (субкоманды) .run_from_argv (self.argv) Файл" / Library / Frameworks /Python.framework/Versions/3.5/lib/python3.5/site-packages/django/core/management/base.py», строка 382, ​​в run_from_argv парсер = сам. рамки / Версия / 3,5 / Библиотека / python3.5 / сайт-пакеты / graphene_django / фильтр / filterset.py», строка 55, в __new__ new_class = супер (GrapheneFilterSetMetaclass, ЦБС) .__ новый __ (ЦБС, имя, базы, ATTRS) Файл "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django_filters/filterset.py", строка 224, в __new__ фильтров [order_by_field] = new_class.get_ordering_filter (OPTS, фильтры) Файл «/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/django_filters/filterset.py», строка 375, в get_ordering_filter «„order_by“не совместим с синтаксисом Сыроватского 'месторождений , Используйте OrderingFilter вместо «AssertionError:„ order_by“не совместим с синтаксисом Сыроватского 'месторождений Используйте OrderingFilter вместо этого.. Позвольте мне просто смелая последняя строка AssertionError ошибки: «order_by» не совместим с синтаксисом Сыроватского 'полей. Используйте OrderingFilter вместо этого. в моем ингредиенте / schema.py # поваренного / ингредиентах / schema.py от реле графен импортом, ObjectType, AbstractType из graphene_django импорта DjangoObjectType из graphene_django.filter импорта DjangoFilterConnectionField из .models импорт Категории, Ингредиент # Графно автоматически сопоставляют поля Типовых Категории в на CategoryNode. # Это настраивается в Meta классе CategoryNode (как вы можете увидеть ниже) класс CategoryNode (DjangoObjectType): класс Meta: модель = Категория filter_fields = [ 'имя', 'ингредиенты'] filter_order_by_field = [ 'имя'] интерфейсы = (реле .Узел, 3 Я попытался клонировать пример из официального графена репо, и она работала отлично на python2.7. Однако в python3.5, тот же код не срабатывает. Я подозревал, что что-то изменилось в Джанго-фильтр, в результате несовместимости. В python2.7 версии Джанго-фильтр 0.11.0. Кто-нибудь знает, как заставить его работать в 0.15.3?
Mox
3

голосов
0

ответ
95

Просмотры

Как запросить переводимые поля с графена

Предполагая, что модель, которая переведенное поле, как показано ниже, как мы можем запросить их с Джанго-графеной? от parler.models импорта TranslatableModel, TranslatedFields класса статьи (TranslatableModel): #regular поля publishing_date = models.DateTimeField (_ ( 'Дата публикации'), по умолчанию = сейчас) # переведенный поля переводы = TranslatedFields (название = models.CharField (_ ( 'название'), max_length = 234), пробкового = models.SlugField (verbose_name = _ ( 'пули'), max_length = 255, db_index = True, пустой = True,), meta_title = models.CharField (max_length = 255, verbose_name = _ ( 'мета название'), пустой = True, по умолчанию = ''), meta_description = модели. TextField (verbose_name = _ ( 'мета описание'), пустой = True, по умолчанию = ''), meta_keywords = models.TextField (verbose_name = _ ( 'мета ключевые слова'), пустой = True, по умолчанию = ''),) для регистрации "неизвестные" поля я делаю что-то вроде: @ convert_django_field.register (GeopositionField) Защиты не convert_geofield_to_string (поле, реестр = None): возвращение graphene.String (описание = field.help_text, требуется = не field.null) ... но это не будет работать здесь. Есть идеи? регистр (GeopositionField) Защита convert_geofield_to_string (поле, реестр = None): возвращение graphene.String (описание = field.help_text, требуется = не field.null) ... но это не будет работать здесь. Есть идеи? регистр (GeopositionField) Защита convert_geofield_to_string (поле, реестр = None): возвращение graphene.String (описание = field.help_text, требуется = не field.null) ... но это не будет работать здесь. Есть идеи?
user2135738
3

голосов
1

ответ
1.8k

Просмотры

Graphene/Django (GraphQL): How to use a query argument in order to exclude nodes matching a specific filter?

I have some video items in a Django/Graphene backend setup. Each video item is linked to one owner. In a React app, I would like to query via GraphQL all the videos owned by the current user on the one hand and all the videos NOT owned by the current user on the other hand. I could run the following GraphQl query and filter on the client side: query AllScenes { allScenes { edges { node { id, name, owner { name } } } } } I would rather have two queries with filters parameters directly asking relevant data to my backend. Something like: query AllScenes($ownerName : String!, $exclude: Boolean!) { allScenes(owner__name: $ownerName, exclude: $exclude) { edges { node { id, name, owner { name } } } } } I would query with ownerName = currentUserName and exclude = True/False yet I just cannot retrieve my exclude argument on my backend side. Here is the code I have tried in my schema.py file: from project.scene_manager.models import Scene
 from graphene import ObjectType, relay, Int, String, Field, Boolean, Float
 from graphene.contrib.django.filter import DjangoFilterConnectionField from graphene.contrib.django.types import DjangoNode
 from django_filters import FilterSet, CharFilter 


 class SceneNode(DjangoNode): 
 class Meta:
 model = Scene 


class SceneFilter(FilterSet):
 owner__name = CharFilter(lookup_type='exact', exclude=exclude) 
 class Meta:
 model = Scene
 fields = ['owner__name']

 class Query(ObjectType):

 scene = relay.NodeField(SceneNode)
 all_scenes = DjangoFilterConnectionField(SceneNode, filterset_class=SceneFilter, exclude=Boolean())

 def resolve_exclude(self, args, info):
 exclude = args.get('exclude')
 return exclude


 class Meta:
 abstract = True My custom SceneFilter is used but I do not know how to pass the exclude arg to it. (I do not think that I am making a proper use of the resolver). Any help on that matter would be much appreciated!
vwrobel
3

голосов
0

ответ
124

Просмотры

Как передать переменные к Apollo Мутация для графена?

Я в настоящее время пытается перейти от сервера Apollo в nodejs к серверу графена, но у меня вопрос, а мутирует. Клиент сторона обработки Const GeneratedForm = Form.create () (IngredientCategoryForm) Const createCategoryMut = gql` мутация createCategoryMut ($ имя: String) {createCategory (название: $ имя) {категория {имя}}} `Const createCategoryWithApollo = graphql (createCategoryMut) экспорт (GeneratedForm) {createCategoryWithApollo в CategoryForm} Я мутирует так: handleSubmit = (е) => {сопз {мутировать} = this.props e.preventDefault () this.props.form.validateFields ((эээ, значения) => {если (! эээ) {мутировать ({переменные: {имя: 'MyName'}}). .then (({данные}) => {console.log ( 'получили данные', данные);}) улов ((ошибка) => {Console.log ( «произошла ошибка отправки запроса», ошибка); })}})} Серверный класс Мутации CreateCategory (graphene.Mutation): класс Аргументы: имя = graphene.String () категория = graphene.Field (лямбда: категория) Защиты мутировать (самоощущение, данные, имя = 'тото') : категория = Категория (имя = имя) вернуться CreateCategory (категория = категория)
dbrrt

Просмотр дополнительных вопросов