【发布时间】:2019-04-22 18:50:03
【问题描述】:
我想知道如何正确地创建突变来创建这个 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)
如您所见,共有三个外键。对于模型 Currency、Country 和 Parent(self)。 公司 DjangoObjectType 看起来很简单,如下所示:
class CompanyType(DjangoObjectType):
class Meta:
model = Company
最后我的变异类 CreateCompany 有 Currency、Country 和 Self(Parent) 定义为 @987654323 @:
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 查询的例子,这样我就知道如何调用这个突变了?非常感谢。
【问题讨论】:
-
您找到解决此问题的方法了吗?
-
@KeykoYume 是的。到 graphene.Field 去 InputType 而不是 Type 对象。如您所见,CompanyInput 类。您需要做的就是将例如 graphene.Field(CurrencyType) 更改为 graphene.Field(CurrencyInput)。与 CompanyInput 相同的货币类。
-
能否请您写下答案以及您为
CurrencyInput定义的内容以及相关的graphql 查询?由于外键字段,我在创建突变时遇到了麻烦,我已经尝试实现您的上述方法,但显然,我缺少一些重要的东西。 -
你们有没有人设法让这个工作?很想看看它的一个例子。
标签: django django-models graphql graphene-python