미국 달러 금액을 나타내기 위해 사용할 수 있는 가장 좋은 장고 모델 필드는 무엇입니까?
미국 달러를 보관해야 합니다.$
장고 모델의 필드에서 달러 금액.사용하기에 가장 좋은 모델 필드 유형은 무엇입니까?사용자가 이 값을 입력하고(오류 검사를 통해) 다른 위치에 있는 사용자에게 출력할 수 있도록 형식을 지정하고 다른 숫자를 계산하는 데 사용할 수 있어야 합니다.
다음과 같이 표시됩니다.
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_APPS
에core/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에 값을 추가할 수 있습니다.
그러면 다음과 같은 기능을 통해 가치를 얻을 수 있습니다.$
그리고 없는 가치.$
사용..amount
에my_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
.
먼저 오픈 환율로 이동한 다음 가입하여 통화 환율을 확인하십시오.
그런 다음 대시보드에서 앱 ID를 복사합니다.
그러면, 세트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_ID
settings.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
'programing' 카테고리의 다른 글
스프링 부트 내 @ControllerAdvise에서 재정의된 예외 이외의 예외에 대해 빈 본문으로 응답하는 Rest (0) | 2023.07.28 |
---|---|
테이블에 문 수준 트리거를 구현할 때 영향을 받는 모든 행에 대해 OLD 및 NEW 레코드를 가져올 수 있습니까? (0) | 2023.07.28 |
TensorFlow에서 변수와 get_variable의 차이 (0) | 2023.07.23 |
PHP 헤더 리디렉션 301 - 의미는 무엇입니까? (0) | 2023.07.23 |
틴터 창을 닫으려면 어떻게 해야 합니까? (0) | 2023.07.23 |