如何在 Django 模型上将月份表示为字段
How to represent month as field on django model
特定日历月应如何表示为与整个月相关的数据字段,例如。 2015 年 3 月,而不是该月的特定日期。 Django 提供了 models.DateField
class 但它需要指定日期。我要找的是 MonthField
.
我正在寻找处理这种情况的最 pythonic 和 "Django" 方法。我现在已经多次遇到这种情况,很想知道 "right" 处理它的方法是什么。
我知道 this 问题。没有讨论基于字符串的方法的优缺点或与其他解决方案的比较。
我正在考虑的一些陈述包括:
- 使用日期字段并将日期强制为每月的 1 号。
- 使用单个整数,以 "months since January, 1900" 方式解释。
- 使用两个单独的整数字段,年和月。
- 使用字符字段,例如“2015-03”
我认为解决方案是使用自定义字段(根据 https://docs.djangoproject.com/en/dev/howto/custom-model-fields/,models.Field
的子 class),使用上述表示之一,以及相关的小部件、验证等.但我也会考虑提供替代解决方案的答案。
一个类似的问题是与特定周相关的数据,例如。员工时间表。我过去通过创建 WorkWeek
模型来处理这个问题,尽管我怀疑这是错误的方法,因为我将数据存储在内置 python 库中已经可用的数据库中。
我建议您继续使用 Django 的 models.DateField
,因为这将允许您保留在基于时间的系列上执行的日历查询,并且可能使您免于过度工程的潜在情况。
显示模型数据时,使用可用的 datetime
函数仅显示一年中的月份。在创作数据时,您可以简单地向用户展示一个自定义表单小部件,并将日期更新为表单验证时的当月 1 日。
特定日历月应如何表示为与整个月相关的数据字段,例如。 2015 年 3 月,而不是该月的特定日期。 Django 提供了 models.DateField
class 但它需要指定日期。我要找的是 MonthField
.
我正在寻找处理这种情况的最 pythonic 和 "Django" 方法。我现在已经多次遇到这种情况,很想知道 "right" 处理它的方法是什么。
我知道 this 问题。没有讨论基于字符串的方法的优缺点或与其他解决方案的比较。
我正在考虑的一些陈述包括:
- 使用日期字段并将日期强制为每月的 1 号。
- 使用单个整数,以 "months since January, 1900" 方式解释。
- 使用两个单独的整数字段,年和月。
- 使用字符字段,例如“2015-03”
我认为解决方案是使用自定义字段(根据 https://docs.djangoproject.com/en/dev/howto/custom-model-fields/,models.Field
的子 class),使用上述表示之一,以及相关的小部件、验证等.但我也会考虑提供替代解决方案的答案。
一个类似的问题是与特定周相关的数据,例如。员工时间表。我过去通过创建 WorkWeek
模型来处理这个问题,尽管我怀疑这是错误的方法,因为我将数据存储在内置 python 库中已经可用的数据库中。
我建议您继续使用 Django 的 models.DateField
,因为这将允许您保留在基于时间的系列上执行的日历查询,并且可能使您免于过度工程的潜在情况。
显示模型数据时,使用可用的 datetime
函数仅显示一年中的月份。在创作数据时,您可以简单地向用户展示一个自定义表单小部件,并将日期更新为表单验证时的当月 1 日。