django的额外模型和表单字段:分钟和枚举
django-stdfields的Python项目详细描述
我希望Django的田地是标准的。目前这仅限于 MinutesField、EnumIntegerField和EnumCharField。
安装:
pip install django-stdfields
内容
- stdfields.forms.MinutesField:使用整数表示 分钟和小时
- stdfields.fields.EnumIntegerField:使使用choices有点困难 更容易
- stdfields.fields.EnumCharField:相同,但是对于带字符的choices来说 键
分钟场
是django标准django.forms.IntegerField的扩展。
此字段将接受以分钟为单位的值,格式如下 hh:mm或h.fraction,类似于Basecamp允许您指定 你花在任务上的时间可以是8:30或8.5。仅在后一种情况下 8.25、8.5、8.50和8.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
现在我们可以使用 EnumCharField和EnumIntegerField模型字段:
# 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一起使用。