gpt4 book ai didi

python - Django 模型和 PostgreSQL 货币类型

转载 作者:行者123 更新时间:2023-11-29 12:06:32 25 4
gpt4 key购买 nike

我有一个现有的 PostgreSQL 数据库,我正在将其用于新的 Django 站点。当我运行时:

python manage.py inspectdb

我得到几个字段,它们具有 PostgreSQL 类型的“money”,但转换不正确。值得称赞的是 Django,他们至少会告诉你他们在猜测。 :)

在 PostgreSQL 文档中,它们提供了货币类型的以下信息:

Name: money
Storage Size: 8 bytes
Description: currency amount
Range: -92233720368547758.08 to +92233720368547758.07

在我看来,这应该是 Django 中的 DecimalField。

其他人是如何处理这个问题的?如果您以前遇到过这个问题,您是否发现了任何“陷阱”?有什么我应该注意的吗?

版本信息:

带有 Python 2.6.5 和 Django 1.3.1 的 PostgreSQL 9.1

最佳答案

这是我为这个问题所做的。我定义了一个从 CharField 子类化的自定义字段,然后添加了一个自定义验证器。注意:我遇到了在管理模块中正确验证 DecimalField 的问题(我想你可以称这是我问的“陷阱”之一!)。我已经为代码创建了单元测试并通过管理页面进行了测试,它似乎工作正常。

from django.db import models
from django.core import exceptions
import re


MONEY_REGEX_PATTERN = re.compile('^\$?-?0*(?:\d+(?!,)(?:\.\d{1,2})?|(?:\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?))$')

def MoneyValidator(value):
"""Will validate a string value against a money regular expression"""
if not MONEY_REGEX_PATTERN.match(value):
raise exceptions.ValidationError('{v} is not a valid dollar amount'.format(v=value))


class MyMoneyField(models.CharField):

"""Custom field for handling values from PostgreSQL's money data type"""

def __init__(self, *args, **kwargs):
kwargs['validators'] = [MoneyValidator]
kwargs['max_length'] = 20
super(MyMoneyField, self).__init__(*args, **kwargs)

关于python - Django 模型和 PostgreSQL 货币类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com