Какой правильный способ локализовать цену в Джанго-шопе?

Я знаю простой способ, сделать несколько разных полей для нужных валют, но это не только уродливо, но валюты будут жестко закодированы. Мне кажется, более элегантно с помощью django-parler, но я не совсем понимаю, как это сделать.

2 ответа

Решение

Я думаю, что это правильный путь:

class CurrencyModel(TranslatableModel):
    translations = TranslatedFields(
        title = models.CharField(_("Title"), max_length=120),
    )
    code = models.CharField(_('ISO 4217 code'), max_lenght=3)

    def __str__(self):
        return self.title

class ItemModel(BaseProduct, TranslatableModel):
    slug = models.SlugField(_("Slug"), unique=True)
    translations = TranslatedFields(
        product_name = models.CharField(_("Item Name"), max_length=256),
        item_price = models.FloatField(_("Item price")),
        currency = models.ForeignKey(CurrencyModel, verbose_name=_("Currency ")),
    )

    def get_price(self, request):
        money = MoneyMaker(self.currency.code)
        return money(self.item_price)

Самый простой способ локализовать цены в django-SHOP - это использовать MoneyInXXX учебный класс. Этот класс может быть создан для каждой валюты, используя MoneyMaker завод.

Всякий раз, когда форматируется класс Money, он корректно локализуется.

Другие вопросы по тегам