如何在不使用中继功能的情况下在graphene-django项目的schema.py中进行过滤查询?

问题描述 投票:0回答:1

我是后端编程的新手,尤其是在石墨烯-Django中。我的问题是如何在不使用中继功能的情况下在graphene-django项目的schema.py中创建过滤查询?我之前看过this,但我不想使用中继功能。而不是我想使用过滤器,但我不知道怎么做?现在我的models.py和schema.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:

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)
django graphene-python graphene-django
1个回答
0
投票

如果您不想使用中继,最好的解决方案是看起来像this

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

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”地址中使用其他查询。例如,您可以使用:

query{
    products{
     id
     name
     price
  }
}

甚至:

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

query{
    products(name:"Men's boots"){
     id
     name
     price
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.