django的额外模型和表单字段:分钟和枚举

django-stdfields的Python项目详细描述


我希望Django的田地是标准的。目前这仅限于 MinutesFieldEnumIntegerFieldEnumCharField

安装:

pip install django-stdfields

内容

  • stdfields.forms.MinutesField:使用整数表示 分钟和小时
  • stdfields.fields.EnumIntegerField:使使用choices有点困难 更容易
  • stdfields.fields.EnumCharField:相同,但是对于带字符的choices来说 键

分钟场

是django标准django.forms.IntegerField的扩展。

此字段将接受以分钟为单位的值,格式如下 hh:mmh.fraction,类似于Basecamp允许您指定 你花在任务上的时间可以是8:308.5。仅在后一种情况下 8.258.58.508.75被视为有效输入。

示例

行动胜于雄辩:

# models.py
class Task(models.Model):
    time_spent = models.IntegerField()

# forms.py
from stdfields.forms import MinutesField

from models import Task

class TaskForm(forms.ModelForm):
    time_spent = MinutesField(label='How long did it take?')

    class Meta:
        model = Task

可以使用stdfieldstags中的minutes模板过滤器来呈现 格式为8:30

{% load stdfieldstags %}
It took me {{ task.time_spent|minutes }} to complete this task.

枚举

当使用django的choices参数 领域。有了stdfields.models.Enumeration类,我有了一个方便的基础 使我保持整洁的类:

# models.py
class Color(Enumeration):
    RED = 'R'
    GREEN = 'G'
    BLUE = 'B'

    @classmethod
    def all(cls):
        return [
            (cls.RED, _(u'Red')),
            (cls.GREEN, _(u'Green')),
            (cls.BLUE, _(u'Blue'))
        ]

class Pencil(models.Model):
    color = models.CharField(choices=Color.all(), max_length=Color.max_length())

# views.py
def red_pencils(request):
    pencils = Pencil.objects.filter(color=Color.RED)
    ...
    # Prints 'Showing the Red pencils'
    logging.info('Showing the %s pencils' % (Color.as_display(Color.RED)))

可能更短。使用Enum代替:

# models.py
class Color(Enum):
    RED = EnumValue('R', 'Red')
    GREEN = EnumValue('G', 'Green')
    BLUE = EnumValue('B', 'Blue')

class Pencil(models.Model):
    color = models.CharField(choices=Color.all(), max_length=Color.max_length())

# views.py
def red_pencils(request):
    pencils = Pencil.objects.filter(color=Color.RED)
    ...
    # Prints 'Showing the Red pencils'
    logging.info('Showing the %s pencils' % (Color.RED_display))

EnumCharField和EnumIntegerField

现在我们可以使用 EnumCharFieldEnumIntegerField模型字段:

# models.py
class Color(Enumeration):
    # same as above

class Pencil(models.Model):
    color = models.EnumCharField(enum=Color, max_length=Color.max_length())

这个例子与上面的基本相同,因为EnumCharField是 正则djangoCharField的子类。使用enum关键字 枚举字段的参数,当您 更新枚举对象。既然你用的是 max_length方法的Enumeration,将更新max_length。 需要的时候。就像前面的例子一样。枚举字段只提供 在阅读代码时要更清晰一些。

EnumIntegerField的工作原理完全相同,但对于带整数的枚举 钥匙。这两个字段都可以与south一起使用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java二进制到十进制   使用GSON时发生java非法状态异常   java ImageJ API:如何将一个图像插入另一个图像   java使用ajax从servlet获取价值   每个容器每个bean的JavaSpring单例作用域   VTD XML查找重影/不存在路径时出现java错误   RPC方法调用中的java Nullpointer异常   java使用索引排序是否有效   安卓 java中Json类中get和getJSONObject的区别是什么   java为什么要添加系统。出来println能让线程运行得更快吗?   java标识符预期问题   反射可以在Java中反射私有静态方法吗   Java SonarQube错误“最终公开静态字段”   终端一直在请求输入?[爪哇]