微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建动态石墨烯参数类

如何解决创建动态石墨烯参数类

刚开始在我的后端使用石墨烯,我有三种类型的用户,他们都有用户名、电子邮件和 user_type,但其他都是可选的。

我没有创建 3 个变异类,而是尝试实现一个通用的 createuser Class

我目前的实现是:

    class createuser(graphene.Mutation):

        user = graphene.Field(UserType)

        class Arguments:
            # user = graphene.ID()
            email = graphene.String(required=True)
            password = graphene.String(required=True)
            user_type = graphene.String(required=True)
            first_name = graphene.String()
            last_name = graphene.String()
            street_address = graphene.String()
            city = graphene.String()
            state = graphene.String()
            zip_code = graphene.Int()
            date = graphene.Date()
            ... #so on

        def mutate(self,info,email,password,user_type,**kwargs):
            user = CustomUser.objects.create(
                username=email,email=email,user_type=user_type,password=password,)

            ... # code where I use kwargs

            return createuser(user=user)

QUESTION: 有没有办法在运行时动态创建 class Arguments:

解决方法

假设您有三个名为 UserModel1UserModel2UserModel3 的用户模型。

如果您的不同用户模型有任何您希望允许更改创建的不同字段,您需要设计输入参数列表以包含所有这些字段,作为可选字段,即

    class Arguments:
        email = graphene.String(required=True)  # common required field
        password = graphene.String(required=True)  # common required field
        user_type = graphene.String(required=True)  # required to switch fields
        ...
        user_model1_field = graphene.String()  # some field that's only used in `UserModel1` that must be optional

同样,对于输出类型,您可以决定您的输出类型是包含所有用户模型的所有字段,还是仅包含三个不同模型之间的公共字段。

然后,在您的变异方法中,您可以打开用户类型并提供与您做出的输出类型决策一致的输出值。

    def mutate(self,info,email,password,user_type,**kwargs):
        if user_type == "UserModel1":
            # do stuff to create UserModel1 with **kwargs
            user = UserModel1.object.create(
               ... parse kwargs to get UserModel1's fields
            return UserType(... parse kwargs and or users fields to created)
        elif user_type == "UserModel2":
            # similarly create UserModel2 from kwargs
            ...
        elif user_type == "UserModel3":
            ... etc. etc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。