เมื่อต้องจัดเก็บข้อมูลเกี่ยวกับเงิน เช่น เงินเดือน ค่าธรรมเนียม หรือรายได้ การใช้ IntegerField ธรรมดาอาจไม่เพียงพอ บทความนี้แนะนำการใช้ django-money ซึ่งให้ MoneyField ที่จัดการสกุลเงินและทศนิยมได้อย่างถูกต้อง
ขั้นตอนการติดตั้งและใช้งาน
1. ติดตั้งแพ็กเกจ
pip install django-money
2. เพิ่มใน settings.py
INSTALLED_APPS += ['djmoney']
3. สร้าง Model ใช้ MoneyField
from django.db import models
from djmoney.models.fields import MoneyField
class Data(models.Model):
name = models.CharField(max_length=100)
salary = MoneyField(
max_digits=14,
decimal_places=2,
default_currency='USD'
)
4. สร้าง Form และ View
from django import forms
from .models import Data
class SalaryForm(forms.ModelForm):
class Meta:
model = Data
fields = '__all__'
def home(request):
if request.method == 'POST':
form = SalaryForm(request.POST)
if form.is_valid():
form.save()
else:
form = SalaryForm()
return render(request, 'home.html', {'form': form})
5. Template home.html
<!DOCTYPE html>
<html>
<head>
<title>Money Field Demo</title>
</head>
<body>
<h2>Salary Form</h2>
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
</body>
</html>
คุณสมบัติของ MoneyField
- max_digits: จำนวนตัวเลขสูงสุด (รวมทศนิยม)
- decimal_places: จำนวนตำแหน่งทศนิยม
- default_currency: สกุลเงินเริ่มต้น (ISO 4217 code)
- จัดเก็บค่าและสกุลเงินแยกกันในฐานข้อมูล
- รองรับการแปลงสกุลเงิน (ต้องตั้งค่า EXCHANGE_BACKEND)
ผลลัพธ์
ฟอร์มจะแสดงช่องกรอกจำนวนเงินพร้อมเลือกสกุลเงิน ทำให้จัดการข้อมูลทางการเงินได้แม่นยำและมาตรฐาน