Django Strawberry пишет мутацию, включающую внешний ключ, который создает несколько объектов

Я пытаюсь заставить мутацию graphql создавать входы для двух моделей django одновременно, используя strawberry. Я проверил документацию здесь и не нашел примеров, как это сделать.

У меня есть следующая модель django:

class Address(models.Model):
    name = models.CharField()

class Person(models.Model):
    name = models.CharField()
    address = models.ForeignKey('Address', on_delete=models.CASCADE, blank=False, null=False)

С ними type.py

@strawberry.django.type(models.Address)
class Address:
    id: auto
    name:auto

@strawberry.django.input(models.Address)
class AddressInput:
    id: auto
    name:auto

@strawberry.django.type(models.Person)
class Person:
    id: auto
    name: auto
    address:'Address'

@strawberry.django.input(models.Person)
class Person:
    id: auto
    name: auto
    address:'AddressInput'

Для schema.py у меня есть:

@strawberry.type
class Mutation:
    createAddress: Address = mutations.create(AddressInput)
    createPerson: Person =mutations.create(PersonInput)

schema = strawberry.Schema(mutation=Mutation)

Я попробовал Мутацию, но получил ошибку:

mutation newPerson ($name: String!, $addressname:String!){
  createPerson(data: {name: $name, address: {name: $addressname}}) {
    id
    name
    address {
      id
      name
    }
  }
}

#Query Variables

{
"name": "Min",
"addressname": "jkkihh",
}

Сообщение об ошибке:

"message": "Field 'id' expected a number but got PersonInput(id=<strawberry.unset._Unset object at 0x00000194FB945C90>, addressname='jkkihh', description=<strawberry.unset._Unset object at 0x00000194FB945C90>, notes=<strawberry.unset._Unset object at 0x00000194FB945C90>)."

Это похоже на вопрос this, который я задавал ранее, используя графен. Там он был решен путем создания нового типа объекта для хранения и написания функции mutate внутри класса для мутации. Я также попробовал сделать две мутации, но возникли проблемы с получением id для адреса внешнего ключа, когда он был создан.

Я думаю, что в пакете strawberry_django есть ошибка, хотя вам лучше использовать пакет strawberry_django_plus. потому что он более поддерживаемый, надеюсь, он скоро будет объединен с официальным пакетом strawberry.

В вашем случае это будет:

from strawberry_django_plus import gql
from strawberry import auto

@gql.django.type(models.Person)
class Person:
    id: auto
    name: auto
    address:'Address'

@gql.django.input(models.Person)
class Person:
    id: auto
    name: auto
    address:'AddressInput'

@gql.type
class Mutation:
    createAddress: Address = gql.django.create_mutation(AddressInput)
    createPerson: Person = gql.django.create_mutation(PersonInput)

schema = strawberry.Schema(mutation=Mutation)
Вернуться на верх