All Projects â†’ mirumee â†’ Django Prices

mirumee / Django Prices

Django fields for the prices module

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Django Prices

stockholm
💵 Modern Python library for working with money and monetary amounts. Human friendly and flexible approach for development. 100% test coverage + built-in support for GraphQL and Protocol Buffers transports using current best-practices.
Stars: ✭ 26 (-80.74%)
Mutual labels:  money, currency, currencies
Cash Cli
💰💰 Convert currency rates directly from your terminal!
Stars: ✭ 168 (+24.44%)
Mutual labels:  currency, currencies, money
Prices
Python price handling for humans.
Stars: ✭ 248 (+83.7%)
Mutual labels:  currency, currencies, money
Countries
Countries - ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2 and Alpha-3) countries codes and names (on eng and rus), ISO 4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, ccTLD countries domains, IOC/NOC and FIFA letters codes, VERY FAST, NO maps[], NO slices[], NO init() funcs, NO external links/files/data, NO interface{}, NO specific dependencies, Databases/JSON/GOB/XML/CSV compatible, Emoji countries flags and currencies support, full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.
Stars: ✭ 85 (-37.04%)
Mutual labels:  currency, currencies, money
Javamoney Lib
JavaMoney financial libraries, extending and complementing JSR 354
Stars: ✭ 104 (-22.96%)
Mutual labels:  currency, currencies, money
currency-converter
💰 Easily convert between 32 currencies
Stars: ✭ 16 (-88.15%)
Mutual labels:  money, currency, currencies
django-prices-openexchangerates
openexchangerates.org support for django-prices
Stars: ✭ 33 (-75.56%)
Mutual labels:  money, currency, currencies
react-local-currency
💵 💴Shows the price of your services in the customer's currency 💶 💷
Stars: ✭ 21 (-84.44%)
Mutual labels:  money, currency, currencies
Money
A precise, type-safe representation of a monetary amount in a given currency
Stars: ✭ 817 (+505.19%)
Mutual labels:  currency, money
Go Money
Go implementation of Fowler's Money pattern
Stars: ✭ 887 (+557.04%)
Mutual labels:  currency, money
Money
A money and currency library for PHP
Stars: ✭ 855 (+533.33%)
Mutual labels:  currency, money
Dinero.js
Create, calculate, and format money in JavaScript and TypeScript.
Stars: ✭ 5,286 (+3815.56%)
Mutual labels:  currency, money
Money
PHP implementation of Fowler's Money pattern.
Stars: ✭ 3,868 (+2765.19%)
Mutual labels:  currency, money
Gocurrency
Simple currency converter. Insert an amount, what currency to convert from and what currency to convert to.
Stars: ✭ 26 (-80.74%)
Mutual labels:  currency, currencies
Vue Numeric
Input field component to display a formatted currency value based on Vue.js
Stars: ✭ 341 (+152.59%)
Mutual labels:  currency, money
Android Money
Simple money and currency converter library for android.
Stars: ✭ 66 (-51.11%)
Mutual labels:  currency, money
Oxr
💱 Node.js wrapper for the Open Exchange Rates API
Stars: ✭ 72 (-46.67%)
Mutual labels:  currencies, money
Cashify
💸 Lightweight currency conversion library, successor of money.js
Stars: ✭ 329 (+143.7%)
Mutual labels:  currency, money
Django Money
Money fields for Django forms and models.
Stars: ✭ 1,064 (+688.15%)
Mutual labels:  django, money
Swap
💱 Currency exchange rates library
Stars: ✭ 1,195 (+785.19%)
Mutual labels:  currency, money

django-prices: Django fields for the prices module

Build Status codecov.io

Installation

  • pip install django-prices
  • Add django_prices to your INSTALLED_APPS at settings.py
  • Follow enmerkar instructions and update both your INSTALLED_APPS and MIDDLEWARE_CLASSES.

Features

Provides support for models:

from django.db import models
from django_prices.models import MoneyField, TaxedMoneyField


class Model(models.Model):
    currency = models.CharField(max_length=3, default="BTC")
    price_net_amount = models.DecimalField(max_digits=9, decimal_places=2, default="5")
    price_net = MoneyField(amount_field="price_net_amount", currency_field="currency")
    price_gross_amount = models.DecimalField(
        max_digits=9, decimal_places=2, default="5"
    )
    price_gross = MoneyField(
        amount_field="price_gross_amount", currency_field="currency"
    )
    price = TaxedMoneyField(
        net_amount_field="price_net_amount",
        gross_amount_field="price_gross_amount",
        currency="currency",
    )

And forms:

from django import forms

from django_prices.forms import MoneyField

AVAILABLE_CURRENCIES = ["BTC", "USD"]


class ProductForm(forms.Form):
    name = forms.CharField(label="Name")
    price_net = MoneyField(label="net", available_currencies=AVAILABLE_CURRENCIES)

And validators:

from django import forms
from prices.forms import Money

from django_prices.forms import MoneyField
from django_prices.validators import (
    MaxMoneyValidator, MinMoneyValidator, MoneyPrecisionValidator)


class DonateForm(forms.Form):
    donator_name = forms.CharField(label="Your name")
    donation = MoneyField(
        label="net",
        available_currencies=["BTC", "USD"],
        max_digits=9,
        decimal_places=2,
        validators=[
            MoneyPrecisionValidator(),
            MinMoneyValidator(Money(5, "USD")),
            MaxMoneyValidator(Money(500, "USD")),
        ],
    )

It also provides support for templates:

{% load prices %}

<p>Price: {{ foo.price.gross|amount }} ({{ foo.price.net|amount }} + {{ foo.price.tax|amount }} tax)</p>

You can also use HTML output from prices template tags, they will wrap currency symbol in a <span> element:

{% load prices %}

<p>Price: {{ foo.price.gross|amount:'html' }} ({{ foo.price.net|amount:'html' }} + {{ foo.price.tax|amount:'html' }} tax)</p>

It will be rendered as a following structure (for example with English locale):

<span class="currency">$</span>15.00

How to migrate to django-prices 2.0

Version 2.0 introduces major changes to how prices data is stored in models, enabling setting price's currency per model instance.

Steps to migrate:

  1. In your forms:

    • remove the currency argument
    • add available_currencies with available choices.

    If the form specified MoneyFields in fields option, replace those with explicit declarations instead:

    AVAILABLE_CURRENCIES = [("BTC", "bitcoins"), ("USD", "US dollar")]
    
    class ModelForm(forms.ModelForm):
        class Meta:
            model = models.Model
            fields = []
    
        price_net = MoneyField(available_currencies=AVAILABLE_CURRENCIES)
    
  2. In your models using MoneyField:

    • Replace all occurrences of the MoneyField class with DecimalField

    • Remove the currency argument from them

    • Change default from Money instance to value acceptable by Decimal field

      Example of code:

      price_net = MoneyField(
          "net", currency="BTC", default=Money("5", "BTC"), max_digits=9, decimal_places=2
      )
      

      Updated code:

      price_net = models.DecimalField("net", default="5", max_digits=9, decimal_places=2)
      
  3. In your migration files:

    • Replace all occurrences of the MoneyField class with DecimalField

    • Remove the currency argument from them

    • Change default from Money instance to value acceptable by Decimal field

      field = django_prices.models.MoneyField(currency='BTC', decimal_places=2, default='5', max_digits=9, verbose_name='net')
      

      Updated code:

      field = models.DecimalField(decimal_places=2, default='5', max_digits=9, verbose_name='net')
      
  4. Rename fields in models. Your old field will still store amount of money, so probably the best choice would be price_net_amount instead price_net.

  5. All places which use Models and it's fields can prevent django app from even starting the code. Possible issues: code tries to access non existing fields. Exclude those fields for now from your ModelForms, Graphene types etc.

  6. Run python manage.py makemigrations. Make sure to do this step before adding new MoneyFields to model! If not, django will generate delete/create migrations instead of rename.

  7. Run python manage.py migrate.

  8. Update django-prices.

  9. Add models.CharField for currency and MoneyField to your models:

    currency = models.CharField(max_length=3, default="BTC")
    price_net_amount = models.DecimalField("net", default="5", max_digits=9, decimal_places=2)
    price_net = MoneyField(amount_field="price_net_amount", currency_field="currency")
    
  10. Run python manage.py makemigrations and python manage.py migrate.

  11. Change TaxedMoneyField declaration:

    price = TaxedMoneyField(
        net_amount_field="price_net_amount",
        gross_amount_field="price_gross_amount",
        currency="currency",
    )
    
  12. Remember to address changes in previously edited ModelForms

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].