graphenedjangocruddals 0.1.4
Graphene-Django-CRUDDALS
π©π½βπ» π π¨π½βπ»
Framework for trivial code, easy and fast to learn and use.
Turn your Django-models into a complete GraphQL API with all CRUD operations
Docs
Built with β€οΈ by Juan J Cardona and contributors
π Table of Contents
π Getting started
π©βπ» Usage
π Features
π Documentation
π License
β€οΈ Contributing
π Contact
π Acknowledgements
πΊοΈ Roadmap
π Getting started
Prerequisites
To install this project you need to have a Django project already set up. If you don't have one, you can follow the official Django tutorial.
Installation
You can install this package using pip:
pip install graphene-django-cruddals
π©βπ» Usage
To use it, simply create a new class that inherits "DjangoModelCruddals"
Suppose we have the following models.
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Then we can create a complete CRUD+DALS for the models Question with the following code
class CruddalsQuestion(DjangoModelCruddals):
class Meta:
model = Question
Now you can use the schema that was generated for you,
schema = CruddalsQuestion.Schema
or use in your existing schema root Query and Mutation
class Query(
# ... your others queries
CruddalsQuestion.Query,
graphene.ObjectType,
):
pass
class Mutation(
# ... your others mutations
CruddalsQuestion.Mutation,
graphene.ObjectType,
):
pass
schema = graphene.Schema( query=Query, mutation=Mutation, )
your schema will have the following queries and mutations
Click to see the generated schema
# Queries
type Query {
readQuestion(where: FilterQuestionInput!): QuestionType
searchQuestions(where: FilterQuestionInput, orderBy: OrderByQuestionInput, paginated: PaginationConfigInput): QuestionPaginatedType
listQuestions: [QuestionType!]
}
# Mutations
type Mutation {
createQuestions(input: [CreateQuestionInput!]): CreateQuestionsPayload
updateQuestions(input: [UpdateQuestionInput!]): UpdateQuestionsPayload
activateQuestions(where: FilterQuestionInput!): ActivateQuestionsPayload
deactivateQuestions(where: FilterQuestionInput!): DeactivateQuestionsPayload
deleteQuestions(where: FilterQuestionInput!): DeleteQuestionsPayload
}
# Inputs
# - From the model: Question
input CreateQuestionInput {
questionText: String!
pubDate: DateTime!
}
input UpdateQuestionInput {
id: ID!
questionText: String
pubDate: DateTime
}
input FilterQuestionInput {
id: IDFilter
questionText: StringFilter
pubDate: DateTimeFilter
AND: [FilterQuestionInput]
OR: [FilterQuestionInput]
NOT: FilterQuestionInput
}
input OrderByQuestionInput {
id: OrderEnum
questionText: OrderStringEnum
pubDate: OrderEnum
}
# - Filters
input IDFilter {
exact: ID
iexact: ID
gt: ID
gte: ID
lt: ID
lte: ID
in: [ID]
contains: ID
icontains: ID
startswith: ID
istartswith: ID
endswith: ID
iendswith: ID
range: [ID]
isnull: Boolean
regex: String
iregex: String
containedBy: ID
}
input StringFilter {
exact: String
iexact: String
gt: String
gte: String
lt: String
lte: String
in: [String]
contains: String
icontains: String
startswith: String
istartswith: String
endswith: String
iendswith: String
range: [String]
isnull: Boolean
regex: String
iregex: String
}
input DateTimeFilter {
exact: DateTime
iexact: DateTime
gt: DateTime
gte: DateTime
lt: DateTime
lte: DateTime
in: [DateTime]
contains: DateTime
icontains: DateTime
startswith: DateTime
istartswith: DateTime
endswith: DateTime
iendswith: DateTime
range: [DateTime]
isnull: Boolean
regex: String
iregex: String
year: DateTime
month: DateTime
day: DateTime
weekDay: DateTime
isoWeekDay: DateTime
week: DateTime
isoYear: DateTime
quarter: DateTime
containedBy: DateTime
hour: DateTime
minute: DateTime
second: DateTime
date: DateTime
time: DateTime
}
# - Pagination
input PaginationConfigInput {
page: Int = 1
itemsPerPage: IntOrAll = "All"
}
# Types
# - From the model: Question
type QuestionType {
id: ID
questionText: String!
pubDate: DateTime!
}
type QuestionPaginatedType implements PaginationInterface {
total: Int
page: Int
pages: Int
hasNext: Boolean
hasPrev: Boolean
indexStart: Int
indexEnd: Int
objects: [QuestionType!]
}
# - Payload the mutations
type CreateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type UpdateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type ActivateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type DeactivateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type DeleteQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
success: Boolean
}
# - Error
type ErrorCollectionType {
objectPosition: String
errors: [ErrorType]
}
type ErrorType {
field: String!
messages: [String!]!
}
# Interfaces
interface PaginationInterface {
total: Int
page: Int
pages: Int
hasNext: Boolean
hasPrev: Boolean
indexStart: Int
indexEnd: Int
}
# Scalars
"""
The `DateTime` scalar type represents a DateTime
value as specified by
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
"""
scalar DateTime
"""The page size can be int or 'All'"""
scalar IntOrAll
# Enums
enum OrderEnum {
ASC
DESC
}
enum OrderStringEnum {
ASC
DESC
IASC
IDESC
}
ππ₯³ Now you can use and test in Graphiql πππ
π Features
Status
Description
β
Done
γ°οΈ
In progress
β
Not started
Feature
Status
Comments
Generate ObjectType from Django model
β
Pending for documentation
Generate InputObjectType from Django model
β
Pending for documentation
Generate Fields from Django model
β
Pending for documentation
Generate InputFields from Django model
β
Pending for documentation
Generate Arguments from Django model
β
Pending for documentation
Generate Mutations from Django model
β
Pending for documentation
Generate Queries from Django model
β
Pending for documentation
Generate resolvers from Django model
β
Pending for documentation
Generate Create operation for a Django model
β
Pending for documentation
Generate Read operation for a Django model
β
Pending for documentation
Generate Update operation for a Django model
β
Pending for documentation
Generate Delete operation for a Django model
β
Pending for documentation
Generate Deactivate operation for a Django model
β
Pending for documentation
Generate Activate operation for a Django model
β
Pending for documentation
Generate List operation for a Django model
β
Pending for documentation
Generate Search operation for a Django model
β
Pending for documentation
Generate each operation, all to be performed massively
β
Pending for documentation
Handle null and blank attribute of Django model
β
Pending for documentation
Handle editable attribute of Django model
β
Pending for documentation
Handle help_text attribute of Django model
β
Pending for documentation
Handle default attribute of Django model
β
Pending for documentation
Handle choices attribute of Django model
β
Pending for documentation
Handle OneToOneField field of Django model
β
Pending for documentation
Handle OneToOneRel field of Django model
β
Pending for documentation
Handle ManyToManyField field of Django model
β
Pending for documentation
Handle ManyToManyRel field of Django model
β
Pending for documentation
Handle ForeignKey field of Django model
β
Pending for documentation
Handle ManyToOneRel field of Django model
β
Pending for documentation
Handle GenericForeignKey field of Django model
β
Pending for documentation
Handle GenericRel field of Django model
β
Pending for documentation
Handle FileField and ImageField fields of Django Model
β
Pending for documentation
Handle JSONField field of Django model
β
Pending for documentation
Allowing nested mutations at any depth level
β
Pending for documentation
Allowing nested queries at any depth level
β
Pending for documentation
Handle pagination of query results
β
Pending for documentation
Handle sorting of query results
β
Pending for documentation
Handle advanced search
β
Pending for documentation
Handle advanced search with AND operator
β
Pending for documentation
Handle advanced search with OR operator
β
Pending for documentation
Handle advanced search with NOT operator
β
Pending for documentation
Handle advanced search with relational fields operator
β
Pending for documentation
Providing a friendly and comprehensive list of errors
β
Pending for documentation
Allow use the ObjectTypes generated from the models
β
Pending for documentation
Allow customizing the ObjectType generated by CRUDDALS
β
Pending for documentation
Allow customizing the InputObjectType generated by CRUDDALS
β
Pending for documentation
Allow customizing the Fields generated by CRUDDALS
β
Pending for documentation
Allow customizing the InputFields generated by CRUDDALS
β
Pending for documentation
Allow customizing the Arguments generated by CRUDDALS
β
Pending for documentation
Allow customizing the Mutations generated by CRUDDALS
β
Pending for documentation
Allow customizing the Queries generated by CRUDDALS
β
Pending for documentation
Allow customizing the resolvers generated by CRUDDALS
β
Pending for documentation
Generate all operations at the model, app, or project level
β
Pending for documentation
Files for consuming the GraphQL API with any JavaScript client
β
Pending for documentation
File with the queries and mutations for with GraphiQL
β
Pending for documentation
File with the entire GraphQL schema generated
β
Pending for documentation
Handle transactions in mutations
β
Pending for documentation
Handle directives in queries and mutations
β
Pending for documentation
Handle subscriptions
β
Pending for documentation
Optimized queries and mutations
β
Pending for documentation
Generate Types for TypeScript
β
Pending for documentation
Generate validators for Zod, Yup, others
β
Pending for documentation
π Documentation
You can find the full documentation here, please keep in mind that this is a work in progress.
π License
Distributed under the MIT License. See LICENSE for more information.
β€οΈ Contributing
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. For more information, please read the CONTRIBUTING.md
π Contact
Email
LinkedIn
GitHub
π Acknowledgements
Python
Django
Graphene Django
Graphene Django CRUD
Readme Template 1
Readme Template 2
and many others
πΊοΈ Roadmap
Finish documentation
Add more examples
Add more features
Add tests
Add localization
Add SEO
Add analytics
Make social marketing
Add monitoring
Add logging
Add CI/CD
Add collaboration
Add communication
Add networking
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.