%global _empty_manifest_terminate_build 0 Name: python-django-prices Version: 2.3.0 Release: 1 Summary: Django fields for the prices module License: BSD URL: https://github.com/mirumee/django-prices Source0: https://mirrors.nju.edu.cn/pypi/web/packages/fb/8d/514f2caef68ec87124b8ec275be307bcc4771398257d1e43245dcfd201a4/django-prices-2.3.0.tar.gz BuildArch: noarch Requires: python3-Babel Requires: python3-Django Requires: python3-enmerkar Requires: python3-prices %description [](https://travis-ci.org/mirumee/django-prices) [](http://codecov.io/github/mirumee/django-prices?branch=master) # Installation * `pip install django-prices` * Add `django_prices` to your `INSTALLED_APPS` at `settings.py` * Follow `enmerkar` [instructions](https://github.com/Zegocover/enmerkar#using-the-middleware) and update both your `INSTALLED_APPS` and `MIDDLEWARE_CLASSES`. # Features Provides support for models: ```python 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: ```python 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: ```python 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: ```html+django {% load prices %}
Price: {{ foo.price.gross|amount }} ({{ foo.price.net|amount }} + {{ foo.price.tax|amount }} tax)
``` You can also use HTML output from `prices` template tags, they will wrap currency symbol in a `` element: ```html+django {% load prices %}Price: {{ foo.price.gross|amount:'html' }} ({{ foo.price.net|amount:'html' }} + {{ foo.price.tax|amount:'html' }} tax)
``` It will be rendered as a following structure (for example with English locale): ```html $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: ```python AVAILABLE_CURRENCIES = [("BTC", "bitcoins"), ("USD", "US dollar")] class ModelForm(forms.ModelForm): class Meta: model = models.Model fields = [] price_net = MoneyField(available_currencies=AVAILABLE_CURRENCIES) ``` 1. 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: ```python price_net = MoneyField( "net", currency="BTC", default=Money("5", "BTC"), max_digits=9, decimal_places=2 ) ``` Updated code: ```python price_net = models.DecimalField("net", default="5", max_digits=9, decimal_places=2) ``` 1. 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 ```python field = django_prices.models.MoneyField(currency='BTC', decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` Updated code: ```python field = models.DecimalField(decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` 1. 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`. 1. 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. 1. 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`. 1. Run `python manage.py migrate`. 1. Update `django-prices`. 1. Add `models.CharField` for currency and `MoneyField` to your models: ```python 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") ``` 1. Run `python manage.py makemigrations` and `python manage.py migrate`. 1. Change `TaxedMoneyField` declaration: ```python price = TaxedMoneyField( net_amount_field="price_net_amount", gross_amount_field="price_gross_amount", currency="currency", ) ``` 1. Remember to address changes in previously edited ModelForms %package -n python3-django-prices Summary: Django fields for the prices module Provides: python-django-prices BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-django-prices [](https://travis-ci.org/mirumee/django-prices) [](http://codecov.io/github/mirumee/django-prices?branch=master) # Installation * `pip install django-prices` * Add `django_prices` to your `INSTALLED_APPS` at `settings.py` * Follow `enmerkar` [instructions](https://github.com/Zegocover/enmerkar#using-the-middleware) and update both your `INSTALLED_APPS` and `MIDDLEWARE_CLASSES`. # Features Provides support for models: ```python 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: ```python 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: ```python 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: ```html+django {% load prices %}Price: {{ foo.price.gross|amount }} ({{ foo.price.net|amount }} + {{ foo.price.tax|amount }} tax)
``` You can also use HTML output from `prices` template tags, they will wrap currency symbol in a `` element: ```html+django {% load prices %}Price: {{ foo.price.gross|amount:'html' }} ({{ foo.price.net|amount:'html' }} + {{ foo.price.tax|amount:'html' }} tax)
``` It will be rendered as a following structure (for example with English locale): ```html $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: ```python AVAILABLE_CURRENCIES = [("BTC", "bitcoins"), ("USD", "US dollar")] class ModelForm(forms.ModelForm): class Meta: model = models.Model fields = [] price_net = MoneyField(available_currencies=AVAILABLE_CURRENCIES) ``` 1. 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: ```python price_net = MoneyField( "net", currency="BTC", default=Money("5", "BTC"), max_digits=9, decimal_places=2 ) ``` Updated code: ```python price_net = models.DecimalField("net", default="5", max_digits=9, decimal_places=2) ``` 1. 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 ```python field = django_prices.models.MoneyField(currency='BTC', decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` Updated code: ```python field = models.DecimalField(decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` 1. 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`. 1. 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. 1. 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`. 1. Run `python manage.py migrate`. 1. Update `django-prices`. 1. Add `models.CharField` for currency and `MoneyField` to your models: ```python 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") ``` 1. Run `python manage.py makemigrations` and `python manage.py migrate`. 1. Change `TaxedMoneyField` declaration: ```python price = TaxedMoneyField( net_amount_field="price_net_amount", gross_amount_field="price_gross_amount", currency="currency", ) ``` 1. Remember to address changes in previously edited ModelForms %package help Summary: Development documents and examples for django-prices Provides: python3-django-prices-doc %description help [](https://travis-ci.org/mirumee/django-prices) [](http://codecov.io/github/mirumee/django-prices?branch=master) # Installation * `pip install django-prices` * Add `django_prices` to your `INSTALLED_APPS` at `settings.py` * Follow `enmerkar` [instructions](https://github.com/Zegocover/enmerkar#using-the-middleware) and update both your `INSTALLED_APPS` and `MIDDLEWARE_CLASSES`. # Features Provides support for models: ```python 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: ```python 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: ```python 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: ```html+django {% load prices %}Price: {{ foo.price.gross|amount }} ({{ foo.price.net|amount }} + {{ foo.price.tax|amount }} tax)
``` You can also use HTML output from `prices` template tags, they will wrap currency symbol in a `` element: ```html+django {% load prices %}Price: {{ foo.price.gross|amount:'html' }} ({{ foo.price.net|amount:'html' }} + {{ foo.price.tax|amount:'html' }} tax)
``` It will be rendered as a following structure (for example with English locale): ```html $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: ```python AVAILABLE_CURRENCIES = [("BTC", "bitcoins"), ("USD", "US dollar")] class ModelForm(forms.ModelForm): class Meta: model = models.Model fields = [] price_net = MoneyField(available_currencies=AVAILABLE_CURRENCIES) ``` 1. 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: ```python price_net = MoneyField( "net", currency="BTC", default=Money("5", "BTC"), max_digits=9, decimal_places=2 ) ``` Updated code: ```python price_net = models.DecimalField("net", default="5", max_digits=9, decimal_places=2) ``` 1. 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 ```python field = django_prices.models.MoneyField(currency='BTC', decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` Updated code: ```python field = models.DecimalField(decimal_places=2, default='5', max_digits=9, verbose_name='net') ``` 1. 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`. 1. 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. 1. 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`. 1. Run `python manage.py migrate`. 1. Update `django-prices`. 1. Add `models.CharField` for currency and `MoneyField` to your models: ```python 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") ``` 1. Run `python manage.py makemigrations` and `python manage.py migrate`. 1. Change `TaxedMoneyField` declaration: ```python price = TaxedMoneyField( net_amount_field="price_net_amount", gross_amount_field="price_gross_amount", currency="currency", ) ``` 1. Remember to address changes in previously edited ModelForms %prep %autosetup -n django-prices-2.3.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-django-prices -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Apr 25 2023 Python_Bot