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 Intellij通过方法中的包查找用法   java中VS代码和打包命名的问题   将java CMS功能集成到具有高度动态内容的网站(Lucene/Mysql/Nosql)的策略   oracle的java类强制转换异常。jdbc。驾驶员OracleConnection   字节码向JVM添加上指令   如何在抽象类中执行java方法?   java是否可以在apache访问日志中排除指定的GET参数?(作者:W7开发环境)   java如何获取已安装音频播放器的列表?   尝试向HS学生展示如何使用Java访问MS数据库   使用正则表达式java对给定行中的特定字符串进行计数   java JOOQ Select查询中的Select计数   方法Java,如何从二维双精度数组中找到特定值?   获取图像URL的java正则表达式   java在切换到新的窗口驱动程序后找不到元素