类别模型 这是我的类别模型
class Category(models.Model):
_id = models.ObjectIdField(primary_key=True)
name = models.CharField(max_length=100)
类别节点 我已经使用中继创建了一个类别节点
class CategoryNode(DjangoObjectType):
class Meta:
model = Category
filter_fields = ['name', 'equipments']
interfaces = (relay.Node,)
添加equipmemt突变 突变时,我需要在突变输入中向设备对象添加类别对象
class AddEquipment(relay.ClientIDMutation):
class Input:
name = graphene.String(required=True)
category = graphene.Field(CategoryNode)
equipment = graphene.Field(EquipmentNode)
@classmethod
def mutate_and_get_payload(cls, root, info, **inputs):
equipment_instance = Equipment(
name=inputs.get('name'),
category=inputs.get('category')
)
equipment_instance.save()
return AddEquipment(equipment=equipment_instance)
通过此代码,我会收到这样的错误
“ AssertionError:AddEquipmentInput.category字段类型必须是Input Type,但得到的是CategoryNode。”
答案 0 :(得分:0)
很遗憾,您不能这样做,因为ObjectType
不能是InputObjectType
。使它起作用的唯一方法是创建一个从InputObjectType
派生的新类。
class CategoryInput(graphene.InputObjectType):
id = graphene.ID(required=True)
name = graphene.String()
并使用它。
class AddEquipment(relay.ClientIDMutation):
class Input:
name = graphene.String(required=True)
category = graphene.Field(CategoryInput, required=True)
...
更新
我认为在您的情况下,如果您只想获取类别实例,则没有必要在突变中输入类别的完整详细信息,因此我建议仅输入name
和类别{{ 1}}在内部id
中,并在class Input
内部查询类别实例see example。
准确地说,您应该将代码重构为:
mutate_and_get_payload