Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
graphql django使用可选字段进行更新变异惯用语?_Django_Graphene Python_Graphene Django - Fatal编程技术网

graphql django使用可选字段进行更新变异惯用语?

graphql django使用可选字段进行更新变异惯用语?,django,graphene-python,graphene-django,Django,Graphene Python,Graphene Django,当用许多可选的InputObjectType字段实现GraphQL更新时(这里只是a和b),它会生成大量样板文件来检查InputObjectType字段是否已传递。在本主题中,是否有被认为是最佳实践的习语 #/models.py 从django.db导入模型 给某物分类(models.Model): a=models.CharField(默认值=“”) b=models.CharField(默认值=“”) #/schema.py 进口石墨烯 从graphene_django导入DjangObje

当用许多可选的InputObjectType字段实现GraphQL更新时(这里只是
a
b
),它会生成大量样板文件来检查InputObjectType字段是否已传递。在本主题中,是否有被认为是最佳实践的习语

#/models.py
从django.db导入模型
给某物分类(models.Model):
a=models.CharField(默认值=“”)
b=models.CharField(默认值=“”)
#/schema.py
进口石墨烯
从graphene_django导入DjangObjectType
从模型中导入一些东西
类SomethingType(DjangObjectType):
类元:
模型
类SomethingInput(graphene.InputObject类型):
#所有字段都是可选的
a=石墨烯。字符串()
b=石墨烯。字符串()
类SomethingUpdate突变(石墨烯突变):
类参数:
id=graphene.id(必需=真)
something\u data=something输入(必需=True)
something=石墨烯字段(something类型)
def变异(自身、信息、id、数据):
something\u db=something.objects.get(pk=id)
#检查字段是否已通过,以及
#仅当值已传递时才更改相应的db值
如果某项数据a不是无:
something\u db.a=something\u data.a
如果某个对象\u data.b不是无:
something\u db.b=something\u data.b
something_db.save()
返回somethingUpdate(something=something)
类别(对象):
#项目架构继承自此类
something\u update\u mutation=SomethingUpdateMutation.Field()
您可以执行以下操作:

def mutate(self, info, **kwargs):
    user = info.context.user
    for k, v in kwargs.items():
        user.k = v
    user.save()
    return UpdateUser(user=user)

但是,我仍然在寻找一些优雅的方式来做到这一点。我认为在更新模型时发送所有数据不是最佳做法。原因是您必须将所有模型数据存储在与GraphQL API交互的系统中,例如前端代码中的客户端。这意味着您必须在有人更改表单中的数据之前查询所有模型数据,或者必须将模型数据存储在前端。后者更糟。必须将状态存储在后端以外的其他位置是不好的。