看着graphene_django,我看到他们有很多解析器都在拾取django模型字段,将它们映射到石墨烯类型。
我有一个JSONField的子类,我也想被选上。
:
# models
class Recipe(models.Model):
name = models.CharField(max_length=100)
instructions = models.TextField()
ingredients = models.ManyToManyField(
Ingredient, related_name='recipes'
)
custom_field = JSONFieldSubclass(....)
# schema
class RecipeType(DjangoObjectType):
class Meta:
model = Recipe
custom_field = ???
我知道我可以为查询编写一个单独的字段和解析器对,但我希望它可以作为该模型的架构的一部分使用。
我意识到我可以做的事:
class RecipeQuery:
custom_field = graphene.JSONString(id=graphene.ID(required=True))
def resolve_custom_field(self, info, **kwargs):
id = kwargs.get('id')
instance = get_item_by_id(id)
return instance.custom_field.to_json()
但是-这意味着要进行一次单独的往返,要获取ID,然后获取该商品的custom_field,对吗?
有没有办法将其视为RecipeType模式的一部分?
答案 0 :(得分:0)
好的,我可以使用以下方法使它工作:
# schema
class RecipeType(DjangoObjectType):
class Meta:
model = Recipe
custom_field = graphene.JSONString(resolver=lambda my_obj, resolve_obj: my_obj.custom_field.to_json())
(custom_field
有一个to_json
方法)
我没有弄清楚石墨烯类型与django模型字段类型之间的映射关系,就想出了办法。
基于此: https://docs.graphene-python.org/en/latest/types/objecttypes/#resolvers
相同的函数名称,但参数设置不同。