4
我想从客户端传递JSON,在服务器端传递JSON,然后根据JSON内容响应客户端。 我想通过从 Json(graphql) 传递多个参数来搜索或过滤数据。
我知道,在通常使用 Python/Flask 的情况下,我需要使用 Graphene/GraphQL,其中我需要用模型描述 ObjectType 后代,绑定在后代的 Meta 类中。然后我应该将这个类作为一个类字段包含在 Query 类中。
这是通过石墨烯进行模型数据通信的方式。
如何解决绕过 JSON 对象数据为搜索查询建模的任务?
class Preferences(SQLAlchemyObjectType):
class Meta:
model = PreferencesModel
interfaces = (relay.Node, )
类查询(graphene.ObjectType): 节点=relay.Node.Field()
user_mother_tongue = graphene.Field(lambda: graphene.List(Preferences),user_mother_tongue=graphene.String())
def resolve_user_mother_tongue(self, info, **kwargs):
print("info",info)
query = Preferences.get_query(info)
print("query",query)
name = kwargs.get("user_mother_tongue")
return query.filter(PreferencesModel.user_mother_tongue == name).all()
user_gender = graphene.Field(lambda: graphene.List(Preferences), user_gender=graphene.String())
def resolve_user_gender(self, info, **kwargs):
query = Preferences.get_query(info)
user_gender = kwargs.get("user_gender")
return query.filter(PreferencesModel.user_gender == user_gender).all()
我想要单一功能(性别,母语)而不是这个。 这些都是json或者graphql查询的数据。
来自客户端的请求: {"user_id":160,"user_gender":"女性","pref_min_age":null,"pref_min_height":null,"pref_max_age":null,"pref_max_height":null,"pref_marital_status":null,"pref_religion":null ,"pref_caste":null,"pref_sub_caste":null,"pref_gotra":null, "pref_mother_tongue":"Hindi","pref_appearance":null,"pref_body_type":null,"pref_eye_color":null,"pref_hair_color":null ,"pref_eye_sight":null,"pref_disability":null,"pref_eating_habits":null,"pref_religious_beliefs":null,"pref_astrological_status":null,"pref_highest_edu":null,"pref_residential_status":null,":pref_occupation" pref_annual_income":null,"pref_family_values":null} 需要使用graphql进行过滤。
我尝试了以下搜索:
search = graphene.Field(lambda: graphene.List(Preferences),search=graphene.String()) def resolve_search(self, info, **args): search= args.get("search") # 搜索查询 如果搜索不是无: Preferences_query = Preferences.get_query(search) 打印(“===>搜索<====”,Preferences_query)
# Query Prefrences
result = Preferences_query.filter((PreferencesModel.firstname.contains(search)) |
(PreferencesModel.user_gotra.contains(search))).all()
return result