我们如何在不使用中继功能的情况下在graphene-django项目的schema.py中进行过滤查询? [英] How we can make filtered query in schema.py in graphene-django project without using Relay feature?

查看:61
本文介绍了我们如何在不使用中继功能的情况下在graphene-django项目的schema.py中进行过滤查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是后端编程的新手,尤其是在石墨烯-django中.我的问题是如何在不使用中继功能的情况下在graphene-django项目的schema.py中创建过滤查询?我以前见过,但我没有要使用中继功能.而不是我想使用过滤器,但我不知道怎么做?现在我的models.py和schema.py看起来像这样:

I am new to back-end programming especially in graphene-django. my question is how can we create filtered query in schema.py in graphene-django project without using Relay feature? i saw this before but i don't want to use Relay feature. rather than i want use a filter, but i don't know how?? now my models.py and schema.py look-like these:

* models.py

*models.py

# shoes_store/ingredients/models.py
from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=50)
    notes = models.TextField(default='')

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=300)
    descreption = models.TextField(default='')
    price = models.CharField(max_length=50, default='')
    imageURL = models.TextField(default='')
    category= models.ForeignKey(Category,on_delete=models.CASCADE)

    def __str__(self):
        return self.name

和schema.py:

and schema.py:

import graphene
from graphene_django.types import DjangoObjectType
from shoes_store.ingredients.models import Category, Product

class CategoryType(DjangoObjectType):
    class Meta:
        model = Category

class ProductType(DjangoObjectType):
    class Meta:
        model = Product


class Query:
    #===========================
    # product
    products = graphene.List(ProductType)
    product = graphene.Field(ProductType,product_id=graphene.ID())    

    def resolve_products(self, info, **kwargs):
        # Querying a list
        return Product.objects.all()

    def resolve_product(self, info, product_id):
        # Querying a single user
        return Product.objects.get(pk=product_id)


    #===========================
    # product_category
    categories = graphene.List(CategoryType)
    category = graphene.Field(CategoryType,category_id=graphene.ID())    

    def resolve_categories(self, info, **kwargs):
        # Querying a list
        return Category.objects.all()

    def resolve_category(self, info, category_id):
        # Querying a single user
        return Category.objects.get(pk=category_id)

推荐答案

最好的解决方案是

the best solution is look-like this if you don't want use Relay.

您可以更改您的schema.py,类似于:

you can change your schema.py similar to:

import graphene
from graphene_django.types import DjangoObjectType
from shoes_store.ingredients.models import Category, Product
from django.db.models import Q


class CategoryType(DjangoObjectType):
    class Meta:
        model = Category

class ProductType(DjangoObjectType):
    class Meta:
        model = Product


class Query:
    #===========================
    # product
    products = graphene.List(ProductType,name=graphene.String(),category_id=graphene.ID())
    product = graphene.Field(ProductType,product_id=graphene.ID())    

    def resolve_products(self, info, name=None,category_id=None, **kwargs):
        # Querying a list
        if name:
            filter = (
                Q(name__icontains=name) |
                Q(descreption__icontains=name)
            )
            return Product.objects.filter(filter)
        #
        if category_id:
            filter = (
                Q(category_id__exact=category_id)
            )
            return Product.objects.filter(filter)
        #
        return Product.objects.all()

    def resolve_product(self, info, product_id):
        # Querying a single user
        return Product.objects.get(pk=product_id)


    #===========================
    # product_category
    categories = graphene.List(CategoryType)
    category = graphene.Field(CategoryType,category_id=graphene.ID())    

    def resolve_categories(self, info, **kwargs):
        # Querying a list
        return Category.objects.all()

    def resolve_category(self, info, category_id):
        # Querying a single user
        return Category.objects.get(pk=category_id)

现在您可以在" http://127.0.0.1:8000/graphql"地址.例如,您可以使用:

now you can use different queries in your "http://127.0.0.1:8000/graphql" address. fore example you can use:

query{
    products{
     id
     name
     price
  }
}

甚至:

query{
    products(categoryId:1){
     id
     name
     price
  }
}

query{
    products(name:"Men's boots"){
     id
     name
     price
  }
}

这篇关于我们如何在不使用中继功能的情况下在graphene-django项目的schema.py中进行过滤查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆