Django的model中日期字段设置默认值的问题
程序员文章站
2022-05-22 15:29:31
之前写过这样一个model:
class monthlyfeemember(models.model):
worker = models.foreignkey(student, ver...
之前写过这样一个model:
class monthlyfeemember(models.model): worker = models.foreignkey(student, verbose_name=u"worker", related_name="as_monthly_fee_members") month = models.charfield(u'month', max_length=10, default=get_current_month()) check_day = models.charfield(u'check day', max_length=20, default=datetime.strftime(date.today(), "%y-%m-%d")) building = models.foreignkey(building, verbose_name=u"building", null=true, blank=true) create_time = models.datetimefield(u'create time', auto_now_add=true) class meta: verbose_name_plural = verbose_name = u"month fee member" unique_together = ('worker', 'month')
写完之后发现每天runserver的时候都会提示要makemigrations,经过排查发现问题出在设置的默认值上。
把字段check_day的默认值设置成default=datetime.strftime(date.today(), "%y-%m-%d") 会导致它在每天都是不同的值,相当于每过一天都重新给字段check_day设置了默认值,这样就会改变model导致需要重新migrations。
在这里可以把default修改为:default=datetime.strftime(date.today, "%y-%m-%d")就行了,这样在真正插入数据的时候才会执行函数,取出返回值。
当然,最好使用datefield来表示check_day:check_day = models.datefield(u'检查日期', auto_now=true)。
但是django并没有提供月份字段monthfield, 因此只能用charfield来代替,这时候如果想设置月份的默认值可以把这个model中的字段month = models.charfield(u'检查月份', max_length=10, default=get_current_month())修改为:month = models.charfield(u'检查月份', max_length=10, default=get_current_month)即可。