Я хотел бы знать, как правильно создать мутацию для создания этой модели django:
class Company(models.Model):
class Meta:
db_table = 'companies'
app_label = 'core'
default_permissions = ()
name = models.CharField(unique=True, max_length=50, null=False)
email = models.EmailField(unique=True, null=False)
phone_number = models.CharField(max_length=13, null=True)
address = models.TextField(max_length=100, null=False)
crn = models.CharField(max_length=20, null=False)
tax = models.CharField(max_length=20, null=False)
parent = models.ForeignKey('self', null=True, on_delete=models.CASCADE)
currency = models.ForeignKey(Currency, null=False, on_delete=models.CASCADE)
country = models.ForeignKey(Country, null=False, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Как видите, есть три внешних ключа.Для модели Валюта , Страна и Родитель (сам) . Company DjangoObjectType выглядит очень просто так:
class CompanyType(DjangoObjectType):
class Meta:
model = Company
И, наконец, мой класс мутаций CreateCompany имеет Валюта , Страна и Self (родительский) определяется как graphene.Field()
:
class CompanyInput(graphene.InputObjectType):
name = graphene.String(required=True)
email = graphene.String(required=True)
address = graphene.String(required=True)
crn = graphene.String(required=True)
tax = graphene.String(required=True)
currency = graphene.Field(CurrencyType)
country = graphene.Field(CountryType)
parent = graphene.Field(CompanyType)
phone_number = graphene.String()
class CreateCompany(graphene.Mutation):
company = graphene.Field(CompanyType)
class Arguments:
company_data = CompanyInput(required=True)
@staticmethod
def mutate(root, info, company_data):
company = Company.objects.create(**company_data)
return CreateCompany(company=company)
Когда я хочу запустить сервер django, возникает ошибка подтверждения.
AssertionError: CompanyInput.currency field type must be Input Type but got: CurrencyType.
Я долго находил хороший учебник по одному внешнему ключу, поэтому, если кто-то знает, как реализовать это решение красиво и понятно, я был бы очень рад.
PS: Не могли бы вы также показать пример запроса GraphQL, чтобы я знал, как вызвать эту мутацию?Большое спасибо.