Как фильтровать в Django-graphene?
Я использую graphene-Django для создания GraphQL API. Я успешно создал этот API, но я не могу передать аргумент для фильтрации ответа. Я хочу фильтровать с помощью ключа ковки из моей модели.
model.py:
class TodoList(models.Model):
userId = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=150)
date = models.DateField(auto_now=True)
text = models.TextField()
schema.py:
class TodoView(DjangoObjectType):
class Meta:
model = TodoList
fields = ('id', 'title', 'date', 'text')
class UserType(DjangoObjectType):
class Meta:
model = User
class TodoQuery(graphene.ObjectType):
todoList = DjangoListField(TodoView)
def resolve_all_todo(root, info):
return TodoList.objects.filter(userId=2)
Но когда я делаю фильтр, он показывает все объекты в результате
Когда я посылаю этот запрос:
{
todoList {
id
title
date
text
}
}
Я получил такой ответ:
{
"data": {
"todoList": [
{
"id": "1",
"title": "test",
"date": "2021-09-13",
"text": "test todo"
},
{
"id": "2",
"title": "test2",
"date": "2021-09-13",
"text": "test2"
},
{
"id": "3",
"title": "admin2 test",
"date": "2021-09-13",
"text": "admin2 test"
},
{
"id": "4",
"title": "admin2 test2",
"date": "2021-09-14",
"text": "admin2 test2"
}
]
}
}
Что я упустил? Или может быть я делаю что-то не так?
У вас есть два варианта,
- Измените имя метода резольвера на
resolve_todoList(...)
сresolve_all_todo(...)
.
class TodoQuery(graphene.ObjectType):
todoList = DjangoListField(TodoView)
def resolve_todoList(root, info):
return TodoList.objects.filter(userId=2)
- Используйте аргумент
resolver
для указания вашего метода резольвера .
class TodoQuery(graphene.ObjectType):
todoList = DjangoListField(TodoView, resolver="resolve_all_todo")
def resolve_all_todo(root, info):
return TodoList.objects.filter(userId=2)