Django: สร้าง FloatField ให้ newforms

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

ช่วงนี้กำลังหัด newforms ใน Django ซึ่งเป็นของใหม่ที่ยังไม่สมบูรณ์ หลักการดี (ดันไปคล้าย Drupal) แต่เนื่องจากยังขาดโน่นขาดนี่อีกเลย ถ้าใช้ตอนนี้ก็อาจจะต้องออกแรงกันมากหน่อย คิดซะว่าออกกำลังกายวันละนิดจิตแจ่มใส เร่ิมต้นกันด้วย FloatField ที่ไม่รู้ว่าหายไปได้ยังไง สงสัยไม่มีใครใช้ Float กันซักเท่าไหร่ บังเอิญผมอยากใช้แต่หาไม่เจอ ก็เขียนเองตามระเบียบ

from django.utils.translation import gettext
from django.core import validators
from django.newforms import Field
from django.newforms.util import ValidationError
 
__all__ = (
    'FloatField',
)
 
EMPTY_VALUES = (None, '')
 
class FloatField(Field):
    def __init__(self, max_digits=None, decimal_places=None, *args, **kwargs):
        self.max_digits, self.decimal_places = max_digits, decimal_places
        super(FloatField, self).__init__(*args, **kwargs)
 
    def clean(self, value):
        """
        Validates that float() can be called on the input. Returns the result
        of float(). Returns None for empty values.
        """
        super(FloatField, self).clean(value)
        if value in EMPTY_VALUES:
            return None
 
        try:
            value = float(value)
        except (ValueError, TypeError):
            raise ValidationError(gettext(u'Enter a float number.'))
        v = validators.IsValidFloat(self.max_digits, self.decimal_places)
        try:
            v(value, None)
        except validators.ValidationError, e:
            raise ValidationError(gettext(u'Enter a float number.'))
        return value

แค่นี้แหละจบง่ายๆ จะได้เอาไปลองใช้ด้วยตัวเอง

เพิ่มเติม

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น