如何在django模型上表示月份为字段

Mat*_*hys 6 python django django-models

如何将特定日历月表示为与整月相关的数据字段,例如.2015年3月,而不是那个月内的某一天.Django提供了models.DateField类,但它要求指定日期.我正在寻找的是一个MonthField.

我正在寻找处理这种情况的最pythonic和"Django"方式.我现在已多次遇到这种情况,并且很想知道处理它的"正确"方法是什么.

我知道这个问题.没有讨论基于字符串的方法的优点和缺点或与其他解决方案的比较.

我正在考虑的一些陈述包括:

  1. 使用日期字段并强制将该日期指向该月的第1天.
  2. 使用单个整数,在"自1900年1月以来的几个月"时尚中进行解释.
  3. 使用两个单独的整数字段,年和月.
  4. 使用字符字段,例如"2015-03"

我认为解决方案是使用自定义字段(models.Field根据https://docs.djangoproject.com/en/dev/howto/custom-model-fields/的子类),使用上面的表示之一,以及相关的小部件,验证等,但我也会考虑提供替代解决方案的答案.

类似的问题是与特定周相关的数据,例如.员工时间表.我过去通过创建WorkWeek模型来处理这个问题,虽然我怀疑这是错误的方式,因为我将数据存储在内置python库中已有的数据库中.

Fil*_*vić 10

我建议你继续使用Django models.DateField,因为这将允许你保留在基于时间的系列上执行的日历查询,它可能会让你免于过度工程的潜在情况.

显示模型数据时,使用可用datetime功能仅显示一年中的月份.创作数据时,您只需向用户显示自定义表单窗口小部件,并在表单验证时将日期更新为当月1日.

  • 我最终创建了一个[自定义字段](https://github.com/clearspark/django-monthfield),它使用models.DateField进行数据库存储,所以我接受了你的答案. (5认同)