我是后端编程的新手,尤其是在石墨烯-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)
如果您不想使用中继,最好的解决方案是看起来像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
}
}