Skip to main content

GraphQL Money types for Django using graphene and django-money (djmoney).

Project description

graphene-djmoney

python package

Build Status PyPI version

Introduction

GraphQL Money types for Django using graphene and django-money (djmoney). If you use django, graphene_django, and django-money, this library is for you.

Supported on:

  • Python 3.7+ (likely earlier versions too, needs tested)
  • Django 2+
  • graphene-django 2+
  • django-money 1+

Here's how it works. Automagically get this query:

query Products {
    products {
        id
        cost {
            ...moneyFragment
        }
    }
}

fragment moneyFragment on Money {
    asString  # "123.45 USD"
    amount    # 123.45
    amountStr # "123.45"
    currency {
        code  # "USD"
        name  # "US Dollar"
        # These are not as commonly used, see tests:
        numeric
        symbol
        prefix
    }
}

With this code:

# yourapp/models.py
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.db import models
from djmoney.models.fields import MoneyField


class User(AbstractUser):
    pass


class Product(models.Model):
    creator = models.ForeignKey(User, related_name="products", on_delete=models.CASCADE)
    title = models.CharField(max_length=2000)
    cost = MoneyField(
        max_digits=settings.CURRENCY_MAX_DIGITS,
        decimal_places=settings.CURRENCY_DECIMAL_PLACES,
        default_currency=settings.BASE_CURRENCY,
        null=True,
        blank=True,
    )

# yourapp/schema/types.py

import graphene
from graphene_django import DjangoObjectType

from yourapp import models


class Product(DjangoObjectType):
    class Meta:
        model = models.Product
        interfaces = (graphene.relay.Node,)
        fields = ("id", "cost")

# yourapp/schema/__init__.py

import graphene

from .. import models
from .types import Product

class Queries(graphene.ObjectType):

    products = graphene.List(graphene.NonNull(types.Product), required=True)

    def resolve_products(self, info, **kwargs):
        return models.Product.objects.all()


schema = graphene.Schema(query=Queries, types=[Product])

# yourapp/settings.py

INSTALLED_APPS += [
    "graphene_djmoney",
]

GRAPHENE = {
    "SCHEMA": "yourapp.schema.schema",
}

Installation

pip install graphene-djmoney

Changelog

0.2.0

- #5, #6, #7 Upgrade to py-moneyed 2.0, add babel format support (new field, `formatted`)
- **Breaking change**: removes `suffix` from schema, since babel doesn't support out of the box.

0.1.3

Initial release, sort of.

Contributing

Running tests:

poetry run pytest

Still TODO. For now, please open a pull request or issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graphene_djmoney-0.2.2.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

graphene_djmoney-0.2.2-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

Details for the file graphene_djmoney-0.2.2.tar.gz.

File metadata

  • Download URL: graphene_djmoney-0.2.2.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.10.6 Linux/5.15.0-1024-azure

File hashes

Hashes for graphene_djmoney-0.2.2.tar.gz
Algorithm Hash digest
SHA256 7f3f60070dd519a30e2d6e5325454bb62f2a55dc432c58694419bbeb1c6849b0
MD5 b7fe8d373927da2dea2a9ee0a803b5f6
BLAKE2b-256 bac8e73d757e8d4da3081aa10f98dfcf6f81ce49062f5f85ea59f31342ec6a83

See more details on using hashes here.

File details

Details for the file graphene_djmoney-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: graphene_djmoney-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.10.6 Linux/5.15.0-1024-azure

File hashes

Hashes for graphene_djmoney-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f2c1eb11e21401240d0008b4e1108026aad5a8616999b8e560705e46c24d79bc
MD5 0cbb90831dc8500e7480ebc729db436b
BLAKE2b-256 620874b28311aa4fa34adf5230b19b9be7c946dcacf338ab055e00d6978a1966

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page