programing

미국 달러 금액을 나타내기 위해 사용할 수 있는 가장 좋은 장고 모델 필드는 무엇입니까?

newstyles 2023. 7. 28. 21:51

미국 달러 금액을 나타내기 위해 사용할 수 있는 가장 좋은 장고 모델 필드는 무엇입니까?

미국 달러를 보관해야 합니다.$장고 모델의 필드에서 달러 금액.사용하기에 가장 좋은 모델 필드 유형은 무엇입니까?사용자가 이 값을 입력하고(오류 검사를 통해) 다른 위치에 있는 사용자에게 출력할 수 있도록 형식을 지정하고 다른 숫자를 계산하는 데 사용할 수 있어야 합니다.

통화 값에 대한 올바른 선택은 소수점 필드입니다.

다음과 같이 표시됩니다.

credit = models.DecimalField(max_digits=6, decimal_places=2)

다른 답변은 100% 옳지만 출력, 서식 등을 수동으로 관리해야 하기 때문에 실용적이지는 않습니다.

장고머니를 사용할 것을 제안합니다.

from djmoney.models.fields import MoneyField
from django.db import models


def SomeModel(models.Model):
    some_currency = MoneyField(
        decimal_places=2,
        default=0,
        default_currency='USD',
        max_digits=11,
    )

템플릿에서 자동으로 작동:

{{ somemodel.some_currency }}

출력:

$123.00

Python-money를 통한 강력한 백엔드를 갖추고 있으며 기본적으로 표준 소수점 필드를 대체합니다.

field = models.DecimalField(max_digits=8, decimal_places=2)

max_dll은 >= decimal_places여야 합니다.이 예제 설정은 최대 999,999.99의 값을 허용합니다.

문서: https://docs.djangoproject.com/en/1.10/ref/models/fields/ #소수 필드

소수점을 정의하고 값 앞에 $ 기호를 반환합니다.

    price = models.DecimalField(max_digits=8, decimal_places=2)

    @property
    def price_display(self):
        return "$%s" % self.price
field = models.DecimalField(max_digits=8, decimal_places=2)

Postgre에 대한 필드를 만들어야 합니다.SQL과 같은 SQL:

 "field" numeric(8, 2) NOT NULL

PostGre를 위한 가장 좋은 방법은 무엇입니까?SQL에 저장된 미국 달러 금액입니다.

Postgre가 필요한 경우SQL 필드 유형 "double precision"을 입력한 다음 django 모델에서 수행해야 합니다.

field = models.FloatField()

장고머니는 다음 용도로 사용할 수 있습니다.money필드:

먼저 설치django-money[exchange]아래와 같이:

pip install django-money[exchange]

*설치할 수 있습니다.django-money없이.[exchange]아래와 같이 통화 변환 기능이 없으므로 설치를 권장합니다.django-money[exchange]위에 표시된 대로:

pip install django-money

다음, 추가'djmoney.contrib.exchange'로.INSTALLED_APPScore/settings.py:

# "core/settings.py"

INSTALLED_APPS = [
    ...,
    'djmoney.contrib.exchange',
]

그런 다음 아래 명령을 실행합니다.

python manage.py migrate

다음으로 필드를 정의합니다.MoneyField(),MinMoneyValidator(),MaxMoneyValidator() 소수점MyModel아래와 같이 'my_app/models.py '의 모델:

# "my_app/models.py"

from djmoney.models.fields import MoneyField
from decimal import Decimal
from djmoney.models.validators import MaxMoneyValidator, MinMoneyValidator

class MyModel(models.Model):
    money = MoneyField(
        max_digits=5, decimal_places=2, default=0, default_currency='USD',
        validators=[
            MinMoneyValidator(Decimal(0.00)), MaxMoneyValidator(Decimal(999.99)),
        ]
    )

그런 다음 아래 명령을 실행합니다.

python manage.py makemigrations && python manage.py migrate

그런 다음 아래와 같이 Django Admin에 값을 추가할 수 있습니다.

enter image description here

그러면 다음과 같은 기능을 통해 가치를 얻을 수 있습니다.$그리고 없는 가치.$사용..amountmy_app/views.py아래와 같이:

# "my_app/views.py"

from django.http import HttpResponse
from app.models import MyModel

def test(request):
    print(MyModel.objects.all()[0].money) # Here
    print(MyModel.objects.all()[0].money.amount) # Here
    return HttpResponse("Test")

그런 다음 콘솔에 다음과 같은 내용이 표시됩니다.

$12.54
12.54

다음으로 변환할 수 있습니다.12.54 USD로.... EUR.

먼저 오픈 환율로 이동한 다음 가입하여 통화 환율을 확인하십시오.

enter image description here

그런 다음 대시보드에서 앱 ID를 복사합니다.

enter image description here

그러면, 세트OPEN_EXCHANGE_RATES_APP_ID ID 포함core/settings.py:

# "core/settings.py"
                             # Here
OPEN_EXCHANGE_RATES_APP_ID = '368183b0b2644e999ef2a61bd38d0ca3'

그런 다음 아래 명령을 실행합니다.

python manage.py update_rates

그러면 변환할 수 있습니다.12.54 USD... EUR와 함께convert_money()그리고.Money()아래와 같이*이 값은 다음 값 없이 사용해야 합니다.$용사를 .amount:

# "my_app/views.py"

from django.http import HttpResponse
from app.models import MyModel
from djmoney.contrib.exchange.models import convert_money
from djmoney.money import Money

def test(request):
    money = MyModel.objects.all()[0].money.amount
    print(convert_money(Money(money, 'USD'), 'EUR')) # Here
    return HttpResponse("Test")

그리고나서,12.54 USD는 로변됩니다로 됩니다.11.70 EUR아래와 같이:

€11.70

자세한 내용은 장고머니 서류를 보시면 됩니다.

그리고, 당신은 60분마다 셀러리 비트 코드로 통화의 환율을 업데이트할 수 있습니다.core/tasks.py그리고.core/settings.py아래와 같이*개방형 환율은 무료 요금제에서 매월 1000건의 요청을 수락할 수 있습니다.

# "core/tasks.py"

from celery import shared_task
from djmoney import settings
from django.utils.module_loading import import_string

@shared_task
def update_rates(app_id):
    backend = import_string(settings.EXCHANGE_BACKEND)(
        access_key=app_id
    )
    backend.update_rates()
    print("Successfully updated")

합니다.app,crontab그리고.update_rates할 수 .OPEN_EXCHANGE_RATES_APP_IDsettings.py아래와 같이:

# "core/settings.py"

from .celery import app
from celery.schedules import crontab
from .tasks import update_rates

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(
        crontab(minute='*/60'),
        update_rates.s(OPEN_EXCHANGE_RATES_APP_ID),
        name='update_rates'
    )

OPEN_EXCHANGE_RATES_APP_ID = '368183b0b2644e999ef2a61bd38d0ca3'

언급URL : https://stackoverflow.com/questions/1139393/what-is-the-best-django-model-field-to-use-to-represent-a-us-dollar-amount